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

  • 相关阅读:
    Token 分析
    maven导入依赖下载jar包速度太慢
    springboot 自动装配
    @ComponentScan
    mysql8.0忘记密码或出现Access denied for user 'root'@'localhost' (using password: YES)
    SpringBoot静态资源处理
    @RestController
    PythonGUI:Tkinter学习笔记01
    Python2和Python3有什么区别?
    Python的Random模块
  • 原文地址:https://www.cnblogs.com/jqpy1994/p/10585628.html
Copyright © 2020-2023  润新知