3

我希望在逐帧浏览的视频上画一条线,以便计算线的角度。我制作了一个非常简单的脚本,它逐步浏览视频并尝试收集数组中每个图像中单击的点,但即使这似乎也不起作用......这是代码:

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

任何帮助表示赞赏!

非常感谢

约翰

4

1 回答 1

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
于 2013-04-25T08:12:32.863 回答