您询问如何使用计算机的鼠标在图片上绘制任何给予者随机形状.这是一个简单的解决方案:
首先,您需要设计一个可以绘制的方法.因此,让我们从OpenCV: Mouse as a Paint-Brush开始自我激励,使用一种方法使用鼠标绘制常见的常规形状,如圆形或矩形.在您的情况下,您将需要随意绘图,就像您可以用手一样.
因此,使用该方法,您可以使用鼠标绘制点,并使用cv2.line()方法在它们之间执行interpolation:
cv2.line(im,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5)
im是您阅读的图像,而您必须始终记住鼠标位置的前坐标:
current_former_x = former_x
current_former_y = former_y
完整的OpenCV计划:
这是代码.不要犹豫,评论任何你不理解的东西:
'''
Created on Apr 3, 2016
@author: Bill BEGUERADJ
'''
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
# mouse callback function
def begueradj_draw(event,former_x,former_y,flags,param):
global current_former_x,current_former_y,drawing, mode
if event==cv2.EVENT_LBUTTONDOWN:
drawing=True
current_former_x,current_former_y=former_x,former_y
elif event==cv2.EVENT_MOUSEMOVE:
if drawing==True:
if mode==True:
cv2.line(im,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5)
current_former_x = former_x
current_former_y = former_y
#print former_x,former_y
elif event==cv2.EVENT_LBUTTONUP:
drawing=False
if mode==True:
cv2.line(im,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5)
current_former_x = former_x
current_former_y = former_y
return former_x,former_y
im = cv2.imread("darwin.jpg")
cv2.namedWindow("Bill BEGUERADJ OpenCV")
cv2.setMouseCallback('Bill BEGUERADJ OpenCV',begueradj_draw)
while(1):
cv2.imshow('Bill BEGUERADJ OpenCV',im)
k=cv2.waitKey(1)&0xFF
if k==27:
break
cv2.destroyAllWindows()
演示: