Mouse as a Paint-Brush
จาก Morange Wiki
เนื้อหา
เปลี่ยน Mouse ให้เป็น พู่กัน วาดรูป
วัตถุประสงค์
- เรียนรู้เกี่ยวกับการใช้เมาส์ ใน OpenCV
- ให้รู้เกี่ยวกับฟังก์ชั่น cv2.setMouseCallback()
เริ่มต้นใช้งาน
เริ่มเขียน Code แบบง่ายๆ
- สร้างไฟล์ Python เพื่อ Run ทดลองใช้ฟังก์ชั่น เมาส์ใน OpenCV แบบง่ายๆ จะได้หน้าจอดำ มาและดับเบิ้ลคลิกที่เมาส์เพื่อวาดสีทับลงไป (eg. sampleMouse.py)
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),100,(255,0,0),-1) # Create a black image, img = np.zeros((512,512,3), np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image',draw_circle) while(1): cv2.imshow('image',img) if cv2.waitKey(20) & 0xFF == 27: break cv2.destroyAllWindows()
เขียน Code แบบ Advance ขึ้น
- เขียน Code ให้เข้าขั้นสูงเพิ่มขึ้นดูยากขึ้นและ สามารถสลับโหมดเขียนเป็น แบบสีเหลี่ยม และ ลบ หรือ เขียนจุดสีแดงได้ ได้โดย กดปุ่ม M ใน Keyboard โดย Code ต่อไปนี้ (eg. advncMouse.py)
import cv2 import numpy as np drawing = False # true if mouse is pressed mode = True # if True, draw rectangle. Press 'm' to toggle to curve ix,iy = -1,-1 # mouse callback function def draw_circle(event,x,y,flags,param): global ix,iy,drawing,mode if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix,iy = x,y elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: if mode == 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: drawing = False if mode == True: cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-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',draw_circle) while(1): cv2.imshow('image',img) k = cv2.waitKey(1) & 0xFF if k == ord('m'): mode = not mode elif k == 27: break cv2.destroyAllWindows()