python中的openCV光流

Posted

技术标签:

【中文标题】python中的openCV光流【英文标题】:openCV optical flow in python 【发布时间】:2012-10-04 07:07:10 【问题描述】:

我正在用 python 编写图像分析程序并尝试使用cv.CalcOpticalFlowFarneback。我弄清楚了大部分事情并且分析工作,但是,我想用flags参数玩一点。在 cv 文档中,它说 flags 是一个整数,描述如下:

flags –
Operation flags that can be a combination of the following:
OPTFLOW_USE_INITIAL_FLOW Use the input flow as an initial flow approximation.
OPTFLOW_FARNEBACK_GAUSSIAN ...

问题是如何设置标志以使用其中一个选项或两个选项?

【问题讨论】:

【参考方案1】:

试试:

flags = OPTFLOW_USE_INITIAL_FLOW | OPTFLOW_FARNEBACK_GAUSSIAN

|(竖线)字符是按位或。做标志的一种常见方法是对每个标志使用不同的 2 次方。例如,如果OPTFLOW_USE_INITIAL_FLOW 是 2,OPTFLOW_FARNEBACK_GAUSSIAN 是 8,那么它们的组合是二进制的 1010。

他们的实际值可以在documentation看到:

OPTFLOW_USE_INITIAL_FLOW = 4
OPTFLOW_FARNEBACK_GAUSSIAN = 256

【讨论】:

谢谢 Koobz,它看起来确实是对的,除了你为什么认为它是 2 和 8 与 1 和 3(二进制中的 01 和 11)。换句话说,为什么你需要每个标志是 2 位而不是 1 位。 en.wikipedia.org/wiki/Bit_field 可能比我解释得更好。每个位本质上是切换特定标志的专有方式。因此,如果您有 8 位,并且每个位对应于某个标志的开启和关闭,您可以紧凑地传达所有 256 种组合并轻松回答问题,例如是否使用位掩码启用了第 4 位位置的标志。例如。 0111 & 0100 = 0100 其中 != 0 和(因此通常为“真”)。 0111 & 1000 = 0,假。

以上是关于python中的openCV光流的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 的 OpenCV 光流

opencv-python DIS光流

使用 opencv 在 Python 中实现光流的问题

OpenCV 中的光流颜色图

OpenCV中的光流及视频特征点追踪

opencv-python DIS光流