اهداف
- یادگیری ترسیم انواع شکل های هندسی
- یادگیری توابع
cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()
کد
همه توابعی که در نمونه کد خواهیم دید همه ورودی های مشترکی خواهند داشت
img
: عکسی که در آن میخواهیم چیزی را رسم کنیم.
color
: رنگ اشکل ها. برای RGB کافیست یک تاپل به عنوان ورودی دهیم به عنوان مثال (255,0,0) برای آبی و برای .
thickness
: ضخامت هر خط یا دایره و ... اگر برای اشکال بسته مانند دایر عدد -1 به عنوان ورودی داده شود داخل شکل پر خواهد شد . ورودی پیش فرض : -1
lineType
: نوع خط مانند 8-connected پیش فرض : 8-connected. cv.LINE_AA
برای منحنی ها گزینه خوبی است
رسم خط
برای رسم خط باید مختصات ابتدا و انتهای خط داده شود. برای رسم یک خط آبی در صفحه مشکی که از بالا چپ به راست پایین است اینگونه عمل میکنیم.
import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
رسم مستطیل
برای رسم مستطیل نیاز به مختصات بالا چپ و پایین راست مستطیل داریم. این دفعه یک مسطیل سبز رسم میکنیم.
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
رسم دایره
برای رسم دایره نیاز به شعاع و مختصات مرکز داریم.
cv.circle(img,(447,63), 63, (0,0,255), -1)
رسم بیضی
برای رسم بیضی نیاز به چند ورودی داریم
- مختصات مرکز به صورت (x,y)
- طول قطر های بیضی
- زاویه چرخش بیضی در خلاف جهت عقربه های ساعت , زاویه شروع و پایان نشان دهنده شروع و پایان کمان بیضی است که در جهت عقربه های ساعت از محور اصلی اندازه گیری می شود. دادن مقادیر 0 و 360 نشان دهند بیضی کامل است. کد زیر نیمه بیضی در مرکز تصویر رسم میکند.
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
رسم چند ضلعی
برای رسم چند ضلعی به مختصات رئوس نیاز داریم. آن نقاط را به آرایه ای به شکل ROWSx1x2 تبدیل میکنیم به صورتی که ROWS تعداد رئوس را نشان میدهد و باید به صورت int32 باشد. یک نمومنه چد ضلعی زرد رنگ :
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
اضافه کردن نوشته به عکس
برای قرارد دادن نوشته روی عکس نیاز به :
- نوشته مورد نظر
- مختصات مورد نظر که میخواهیم نوشته را روی آن قرار دهیم
- نوع فونت
- اندازه فونت
- چیز های معمولی مثل رنگ , ضخامت , نوع خط و ...
lineType = cv.LINE_AA
پیشنهاد میشود.
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)