Cảm ơn rất nhiều, nếu có ai có thể giúp tôi. Im cố gắng, sử dụng một ví dụ về cuốn sách "Oreilly Lập trình máy tính Vision với Python", ở cuối trang 216.OpenCV Python calcOpticalFlowFarneback
#!/usr/bin/env python
import cv2
def draw_flow(im,flow,step=16):
h,w = im.shape[:2]
y,x = mgrid[step/2:h:step,step/2:w:step].reshape(2,-1)
fx,fy = flow[y,x].T
# create line endpoints
lines = vstack([x,y,x+fx,y+fy]).T.reshape(-1,2,2)
lines = int32(lines)
# create image and draw
vis = cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
for (x1,y1),(x2,y2) in lines:
cv2.line(vis,(x1,y1),(x2,y2),(0,255,0),1)
cv2.circle(vis,(x1,y1),1,(0,255,0), -1)
return vis
cap = cv2.VideoCapture(0)
ret,im = cap.read()
prev_gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
while True:
# get grayscale image
ret,im = cap.read()
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# compute flow
#flow = cv2.calcOpticalFlowFarneback(prev_gray,gray,None,0.5,3,15,3,5,1.2,0)
flow = cv2.calcOpticalFlowFarneback(prev_gray,gray,float(0),float(0),3,15,3,5,float(1),0)
prev_gray = gray
# plot the flow vectors
cv2.imshow('Optical flow',draw_flow(gray,flow))
if cv2.waitKey(10) == 27:
break
Im thực hiện trong thiết bị đầu cuối (LXUbuntu, lxterminal) và tôi nhận được lỗi sau:
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
Traceback (most recent call last):
File "hw.py", line 35, in <module>
flow = cv2.calcOpticalFlowFarneback(prev_gray,gray,None,0.5,3,15,3,5,1.2,0)
TypeError: a float is required
Tôi hiểu rằng vấn đề nằm trong hàm calcOpticalFlowFarneback, vì điều này cần một số trong float, do đó, im thử calcOpticalFlowFarneback (prev_gray, gray, None, float (0.5), 3,15,3,5, float (1.2), 0) nhưng không hoạt động.
Thanks a lot.
"một phao là cần thiết" có lẽ sẽ được đề cập đến phi các đối số float, non-int trong danh sách đối số .. – asheeshr