我想在视频上绘制一条线,我正在逐帧踩踏,这样我就可以计算出线的角度。我制作了一个非常简单的脚本,它逐步浏览视频并尝试收集数组中每个图像中点击的点数,但是即使这样也没有用......这是代码:
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
感谢任何帮助!
非常感谢
约翰
答案 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