光流法draw_flow()函数报错

光流法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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G11176593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值