آموزش مقدماتی opencv(قسمت چهارم)
رسم دایره با موس
در این قسمت از آموزش میخواهیم با استفاده از موس دایره ای رسم کنیم .
() cv2.setMouseCallback:
ما میتوانیم با استفاده از تابع() cv2.setMouseCallback ،اطلاعات رویداد موس را بدست بیاریم؛ مثل موقعیت کلیک کردن و نوع آن.
این تابع دو تا پارامتر می گیرد:
- پارامتر اول:نام پنجره ای است که می خواهیم در آن دایره رسم کنیم.
- پارامتر دوم:نام تابعی است که قرار است اطلاعات موس به آن داده شود.
cv2.setMouseCallback('image',draw_circle)
تابع:
def draw_circle(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),100,(255,0,0),-1)
تابع ما پنج تا پارامتر از تابع() cv2.setMouseCallback دریافت می کند که ما برای رسم دایره به سه تای اولی آن نیاز داریم پارامتر اول نوع کلیک کردن موس را می گوید. پارامتر دوم و سوم همانطور که از اسمشان مشخص است مختصات کلیک کردن هستند.
انواع کلیک کردن:
اگر دلتان میخواهد بدانید چه حالت هایی برای کلیک کردن داریم کد زیر را ران کنید.
events = [i for i in dir(cv2) if 'EVENT' in i] print( events )
()cv2.namedWindow:
با استفاده از این تابع ما پنجره ای می سازیم که عکس در آن نمایش داده بشود.
دو پارامتر این تابع می گیرد :
- پارامتر اول:نام پنجره است که قرار است تصویر در آن نمایش داده شود
- پارامتر دوم:قابل تغییر بودن یا نبودن سایز پنجره است ؛اگر حالت cv2.WINDOW_AUTOSIZE رو بذاریم که نمی توانیم سایز پنجره رو تغییر بدهیم اما در حالت cv2.WINDOW_NORMAL میتوان سایز پنجره رو تغییر داد.به صورت دیفالت نمیتوان سایزش را تغییر داد.
ایجاد تصویر سیاه:
برای ایجاد بومی سیاه رنگ از کتاب خونه numpy ،با استفاده از کد زیر ایجاد می کنیم.
img=np.zeros((512,512,3))
می دانیم که عکس سیاه تمام مقادیر پیکسل هایش صفر است پس برای ایجاد یک تصویر سیاه می توان از ()np.zeros استفاده کرد که یک تاپل میگیرد؛ که به ترتیب (تعداد کانال های تصویر,سطر,ستون) هستند.
در نهایت کد کلی به صورت زیر است:
import cv2 import numpy as np #mouse callback function def draw_circle(event,x,y,flags,param): if event==cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),20,(255,0,0),-1) #craete a block image , a window and bind the function to window img=np.zeros((512,512,3)) cv2.namedWindow("image",cv2.WINDOW_NORMAL) cv2.setMouseCallback("image",draw_circle) while True: cv2.imshow('image',img) if cv2.waitKey(20) == ord("q"): break cv2.destroyAllWindows()
دیدگاهتان را بنویسید