我试着用python中的openCV包在图片上画矩形。当我画一个矩形时,我得到了多个相互重叠的矩形,而不是一个单独的矩形。如下图所示
这是我的代码。请告诉我哪里出错了,需要更正什么,这样我就只得到一个矩形。
import cv2
import numpy as np
drawing = False
ix,iy = -1, -1
img = cv2.imread('drawing_over_image/dog.jpg')
def draw(event, x, y, flags, params):
global ix, iy, drawing
if event == cv2.EVENT_LBUTTONDOWN:
ix,iy = x,y
drawing = True
elif event == cv2.EVENT_MOUSEMOVE:
if drawing:
if ix < x and iy < y:
cv2.rectangle(img=img, pt1=(ix,iy), pt2=(x,y), color=[255,0,0], thickness=1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.rectangle(img=img, pt1=(ix,iy), pt2=(x,y), color=[255,0,0], thickness=1)
if __name__ == "__main__":
while True:
cv2.imshow(winname='image', mat=img)
cv2.setMouseCallback('image', draw)
if cv2.waitKey(1) & 0xFF == 27:
cv2.destroyAllWindows()
break
2条答案
按热度按时间3qpi33ja1#
它画多个矩形,因为你画矩形的每一个鼠标移动后,用户按下按钮。相反,你应该画每当事件完成时,即当用户释放左键。我修正了你的代码,并添加了一个基本的参考图像,让你看到你的矩形时,你正在绘制。希望它有帮助!
输出:
thtygnil2#
编辑:
第18行和第28行中存在拼写错误
mat=refimg
至img
修改代码:
这是我如何使用树莓派4B在Linux上的