我正在尝试使用鼠标作为输入在 python 中使用 Opencv 绘制矩形。我从 opencv 文档中制作了这段代码。绘制矩形时出现问题,即当您尝试从起点拖动矩形时一直绘制到终点。就像我在图片中展示的那样。
如何绘制干净的未填充矩形?在那里我可以看到绘制一个实际的矩形。就像我们在 Paint 中所做的那样
import cv2
import numpy as np
drawing = False
ix,iy = -1,-1
def draw_rect(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:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),1)
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_rect)
while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
谁能告诉我为什么会这样?有什么解决办法吗??
原文由 Shriniwas 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您在
event == cv2.EVENT_MOUSEMOVE
期间移动鼠标时,您也会同时绘制 recatnglecv2.rectangle(img,(ix,iy),(x,y),(0,255,0),1)
。尝试下面的一段代码。
希望它能解决你的问题。干杯。
预期输出:
更新
以上代码仅适用于黑色背景图像。但是我们可以为任何图像绘制矩形,所以 -
尝试下面的一段代码。
将文件另存为
capture_events.py
为了测试,我们选择了位于同一目录的演示图片。现在通过以下方式运行代码 -python capture_events.py --image demo.jpg
预期输出:
如果出于某种原因我们想要重新选择图像的任何部分,我们可以简单地按“r”来摆脱错误的选择并尝试新的选择。
希望,它会帮助更多。检查这个 要点,你可以实现更多的功能。干杯。