Advertisement

OpenCV 4.0 Dis光流算法 运动检测

阅读量:

该代码实现了OpenCV中的光流差分演示功能

opencv4.0 numpy1.15版本能运行:

1280 720 i7 cpu 30多ms,占用30%多。

640 360 i7 cpu 10ms,占用30%多。

由于mag的取值范围不确定,在这种情况下该返回结果的归一化处理存在缺陷。即使没有发生任何变化也会导致输出图像呈现偏色现象。

复制代码
  
    
 import cv2 as cv
    
 import numpy as np
    
 cap = cv.VideoCapture("D:/images/video/vtest.avi")
    
 # https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/
    
 ret, frame1 = cap.read()
    
 prvs = cv.cvtColor(frame1,cv.COLOR_BGR2GRAY)
    
 hsv = np.zeros_like(frame1)
    
 hsv[...,1] = 255
    
 dis = cv.DISOpticalFlow_create()
    
 while(1):
    
    ret, frame2 = cap.read()
    
    next = cv.cvtColor(frame2,cv.COLOR_BGR2GRAY)
    
    flow = dis.calc(prvs,next, None,)
    
    # flow = cv.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
    
    mag, ang = cv.cartToPolar(flow[...,0], flow[...,1])
    
    print('max',np.max(mag))
    
    hsv[...,0] = ang*180/np.pi/2
    
    hsv[...,2] = cv.normalize(mag,None,0,255,cv.NORM_MINMAX)
    
    bgr = cv.cvtColor(hsv,cv.COLOR_HSV2BGR)
    
    cv.imshow('result',bgr)
    
    cv.imshow('input', frame2)
    
    k = cv.waitKey(30) & 0xff
    
    if k == 27:
    
        break
    
    elif k == ord('s'):
    
        cv.imwrite('opticalfb.png',frame2)
    
        cv.imwrite('opticalhsv.png',bgr)
    
    prvs = next
    
 cap.release()
    
 cv.destroyAllWindows()

请关注我的公众号,最新资讯在这里与大家及时分享。

全部评论 (0)

还没有任何评论哟~