Python& CV2:如何用鼠标在图像上画一条线然后返回线坐标?

时间:2013-04-24 14:53:19

标签: python opencv

我想在视频上绘制一条线,我正在逐帧踩踏,这样我就可以计算出线的角度。我制作了一个非常简单的脚本,它逐步浏览视频并尝试收集数组中每个图像中点击的点数,但是即使这样也没有用......这是代码:

import cv2, cv

cap = cv2.VideoCapture('video.avi')

box = []
def on_mouse(event, x, y, flags):
    if event == cv.CV_EVENT_LBUTTONDOWN:
        print 'Mouse Position: '+x+', '+y
        box.append(x, y)

#cv2.rectangle(img, pt1, pt2, color)
#cv2.line(img, pt1, pt2, color) 
drawing_box = False

cv.SetMouseCallback('real image', on_mouse, 0)
count = 0
while(1):
    _,img = cap.read()
    img = cv2.blur(img, (3,3))

    cv2.namedWindow('real image')
    cv2.imshow('real image', img)

    if cv2.waitKey(0) == 27:
        cv2.destroyAllWindows()
        break
print box

感谢任何帮助!

非常感谢

约翰

1 个答案:

答案 0 :(得分:6)

以下是我找到的解决方法:

def on_mouse(event, x, y, flags, params):
    if event == cv.CV_EVENT_LBUTTONDOWN:
        print 'Start Mouse Position: '+str(x)+', '+str(y)
        sbox = [x, y]
        boxes.append(sbox)
    elif event == cv.CV_EVENT_LBUTTONUP:
        print 'End Mouse Position: '+str(x)+', '+str(y)
        ebox = [x, y]
        boxes.append(ebox)

count = 0
while(1):
    count += 1
    _,img = cap.read()
    img = cv2.blur(img, (3,3))

    cv2.namedWindow('real image')
    cv.SetMouseCallback('real image', on_mouse, 0)
    cv2.imshow('real image', img)

    if count < 50:
        if cv2.waitKey(33) == 27:
            cv2.destroyAllWindows()
            break
    elif count >= 50:
        if cv2.waitKey(0) == 27:
            cv2.destroyAllWindows()
            break
        count = 0