Python Opencv 102
Fare Olayları
Fare Çift Tıklama İle Daire Çizen Program
- Fare Olaylarııını öğrenip
- cv2.setMouseCallback() fonksiyonunu tanıyacağız.
import cv2 import numpy as np #Fare Tıklama Fonksiyonu def __daireciz__(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),100,(255,0,0),-1) #Siyah bir resim oluşturuyorum img = np.zeros((512,512,3),np.uint8) cv2.namedWindow('Pencere') cv2.setMouseCallback('Pencere',__daireciz__) while(1): cv2.imshow('Pencere',img) if cv2.waitKey(20) & 0xFF == 27: break cv2.destroyAllWindows()
Yukarıdaki kodu çalıştırdığımızda görseldeki çıktyı almış olacağız.
import cv2 import numpy as np cizim = False #Fareye tıklandıysa True mod = True #Eğer True ise dikdörtgen çiz. 'm' ye basılıysa eğrili çiz ix, iy = -1, -1 def daireCiz(event, x,y,flags,param): global ix, iy,cizim,mod if event == cv2.EVENT_LBUTTONDOWN: cizim = True ix, iy = x,y elif event == cv2.EVENT_MOUSEMOVE: if cizim == True: if mod == True: cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1) else: cv2.circle(img,(x,y),5,(0,0,255),-1) elif event == cv2.EVENT_LBUTTONUP: cizim = False if mod == True: cv2.rectangle(img,(ix,iy),(x,y),(0,0,255),-1) else: cv2.circle(img,(x,y),5,(0,0,255),-1) img = np.zeros((512,512,3),np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image',daireCiz) while(1): cv2.imshow('image',img) k = cv2.waitKey(1) & 0xFF if k == ord('m'): mod = not mod elif k == 27: break cv2.destroyAllWindows()
m tuşuna basınca mod değiştirebiliyoruz. Yani normal çizim veya direkt kare – dikdörtgen çizimi yapabiliriz.