1. 程式人生 > >光流法draw_flow()函數報錯

光流法draw_flow()函數報錯

scale space ace ont ima 解決方案 create one cvt

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

光流法draw_flow()函數報錯