光流法draw_flow()函数报错
1 import cv2
2 from scipy import *
3
4
5 def draw_flow(im, flow, step=16):
6 """ Plot optical flow at sample points
7 spaced step pixels apart. """
8 h, w = im.shape[:2]
9 y, x = mgrid[step / 2:h:step, step / 2:w:step].reshape(2, -1)
10 fx,fy = flow[y, x].T
11 # create line endpoints
12 lines = vstack([x, y, x + fx, y + fy]).T.reshape(-1, 2, 2)
13 lines = int32(lines)
14 # create image and draw
15 vis = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
16 for (x1, y1), (x2, y2) in lines:
17 cv2.line(vis, (x1, y1), (x2, y2), (0, 255, 0), 1)
18 cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
19 return vis
20 # setup video capture
21 cap = cv2.VideoCapture(0)
22 ret, im = cap.read()
23 prev_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
24 while True:
25 # get grayscale image
26 ret, im = cap.read()
27 gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
28 # compute flow
29 flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
30 prev_gray = gray
31 # plot the flow vectors
32 cv2.imshow('Optical flow', draw_flow(gray, flow))
33 if cv2.waitKey(10) == 27:
34 break
报错:
解决方案行加上.astype(int)就解决了
y, x = mgrid[step / 2:h:step, step / 2:w:step].reshape(2, -1).astype(int) #以网格的形式选取二维图像上等间隔的点,这里间隔为16,reshape成2行的array
版权归原作者 G11176593 所有, 如有侵权,请联系我们删除。