我试图让用户能够在对象周围绘制一个矩形并裁剪它 -
使用此代码 -
def click_and_crop(event, x, y, flags, param):
global refPt, drawing, cropping
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
refPt = [(x, y)]
cropping = True
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
cv2.rectangle(closeres, refPt[0], (x,y),(0,255,0),2)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
refPt.append((x, y))
cropping = False
cv2.rectangle(closeres, refPt[0], refPt[1], (0, 255, 0), 2)
cv2.imshow("image", closeres)
它绘制了多个矩形,而不仅仅是一个改变大小的矩形,最终看起来像这样 -
任何人都知道如何解决这个问题,所以它会改变大小吗? 如果我改变代码 -
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
closeres = cloneclone
cv2.rectangle(closeres, refPt[0], (x,y),(0,255,0),2)
尝试在每次更改时擦除矩形我最终看不到任何内容,没有矩形并收到此消息 -
追踪(最近一次通话): 在click_and_crop中输入第38行的“project2.py” cv2.rectangle(closeres,refPt [0],refPt 1,(0,255,0),2) UnboundLocalError:赋值之前引用的局部变量'closeres'
答案 0 :(得分:2)
每次在事件处理程序开始时,您必须绘制图像,而不是在最后一个if条件内。 然后绘制sizer矩形。否则,不删除前一个矩形。图像逐渐被破坏。 刷新率越高,图像越绿。
可能的优化是使用XOR模式,因此如果再次绘制前一个矩形,它将恢复图像(但在这种情况下矩形不能是纯绿色)但是它更复杂