一个图片标注的小工具实现

文章介绍了如何利用OpenCV库处理鼠标事件,如按下、抬起和移动,实现图像上的矩形选择和动态绘制功能。程序记录鼠标操作并实时更新显示区域。
摘要由CSDN通过智能技术生成
import cv2
image = cv2.imread("../x.jpg")
dx, dy = 0, 0
isdown = False
def callback(event,x,y,flags,userdata):
    global dx, dy, isdown
    image = userdata

    color = (0, 255, 0)
    if flags & cv2.EVENT_FLAG_CTRLKEY:
        color = 255, 0, 0
    elif flags & cv2.EVENT_FLAG_SHIFTKEY:
        color = 0, 255, 0

    elif flags & cv2.EVENT_FLAG_ALTKEY:
        color = 120, 233, 24

    if event ==cv2.EVENT_LBUTTONDOWN:
        dx, dy = x, y
        isdown = True
    elif event ==cv2.EVENT_LBUTTONUP:
        isdown = False
        cv2.rectangle(image, (dx, dy), (x, y), (0, 255, 125), 2)
        cv2.imshow("image", image)
    elif event ==cv2.EVENT_MOUSEMOVE:
        if isdown:
            temp = image.copy()
            cv2.rectangle(temp, (dx, dy), (x, y), color, 2)
            cv2.imshow("image", temp)

image = cv2.imread(("../x.jpg"))
cv2.namedWindow("image", cv2.WINDOW_FREERATIO)#提供可拖动的window
cv2.setMouseCallback("image", callback, image)
cv2.imshow("image", image)
cv2.waitKey()

while True:
    key = cv2.waitKey()
    if key ==ord('q'):
        break

cv2.destroyAllWindows()

EVENT_LBUTTONDOWN事件发生时,我模拟了按下鼠标左键的行为。程序会记录下我按下鼠标时的坐标位置,作为绘制矩形的起始点。同时,程序会设置一个内部标记,表示鼠标当前处于按下状态。

EVENT_LBUTTONUP事件触发时,我模拟了松开鼠标左键的动作。如果程序检测到鼠标之前确实处于按下状态,它会在图像上从起始点到我松开鼠标时的当前位置绘制一个矩形。这个矩形框会覆盖在我选择的图像区域上,并且绘制完成后,更新后的图像会立即显示出来。

EVENT_MOUSEMOVE事件处理中,我模拟了拖动鼠标的行为。如果鼠标当前处于按下状态,程序会在图像的一个临时副本上,根据我鼠标移动的位置实时绘制一个动态的矩形。这个矩形会随着鼠标的移动而动态变化,显示出一个临时的、跟随鼠标移动的矩形框。每次鼠标移动时,都会更新这个临时副本并显示出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值