繁体   English   中英

OpenCV密集光流矩阵

[英]OpenCV Dense Optical Flow Matrix

我还有一个关于OpenCVs密集光流函数(Farneback)的输出矩阵的问题。 我最近问了一个类似的问题

OpenCV的Dense光流(Farneback)函数的输出是什么?如何用它在Python中构建光流图?

从此我现在知道矩阵中存储的值是特定像素相对于前一帧移动的X和Y距离(如果我错了,请纠正我)。

我正在使用640x480像素的视频馈送来计算光通量,流矩阵的形状显示在下面的打印结果中,npte我在读取前两帧后只是为了显示阵列的结构而使用了一个中断。

import cv2
import numpy as np

cap = cv2.VideoCapture("T5.avi")

ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)

while (1):
    ret, frame2 = cap.read()
    next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)

    flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 2, 5, 1.2, 0)
    print flow.shape
    print "Flow : : 0"
    print flow[:][:][0]
    print "Flow : : 1"
    print flow[:][:][1]
    break

它具有以下输出:

(480, 640, 2)
Flow : : 0
[[ 0.01214151  0.22083586]
 [ 0.01184586  0.18637304]
 [ 0.01057486  0.15194368]
 ..., 
 [ 0.00064609 -0.00283471]
 [ 0.00046074  0.0047204 ]
 [ 0.000404   -0.00282944]]
Flow : : 1
[[ 0.0152726   0.35010788]
 [ 0.01538487  0.28910625]
 [ 0.01413684  0.22534071]
 ..., 
 [ 0.00082013 -0.00668656]
 [ 0.00060558  0.00633681]
 [ 0.00056752 -0.00331147]]

我现在想知道为什么在每个位置中都存储2个值? 是否存储了两个X和Y值? 可能是初始职位还是最终职位? 还是零部件具有虚构零部件?

我已经做了很多搜索,但是还没有找到任何可以解释这一点的东西。

快速解答:对于每个像素,您都可以获得XY轴上的位移值。

我认为您在这里混合了两种不同的东西:
正如我在上一篇文章中提到的那样,正如我们在此处看到的,您的矩阵尺寸为(480, 640, 2) 请勿在代表帧中特定像素位置的X,Y值与每个像素位置内的DeltaX,DeltaY位移值之间混合使用。

例如, flow[20][20][:]代表位置20 x 20处的像素,它实际上是其中包含2个浮点值的点-之前我们讨论过的DeltaX,DeltaY
因此, flow[20][20][0]实际上是像素20x20处的DeltaXflow[20][20][1]是相同像素( 20x20 )处的DeltaY

希望现在清楚了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM