Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算全局运动opencv 2.4.x C++;_C++_Opencv_Opencv3.0_Motion Detection - Fatal编程技术网

C++ 计算全局运动opencv 2.4.x C++;

C++ 计算全局运动opencv 2.4.x C++;,c++,opencv,opencv3.0,motion-detection,C++,Opencv,Opencv3.0,Motion Detection,这里有两张照片,一张是在外科医生采取行动前拍摄的,另一张是在手术后拍摄的 之前: 之后: 差异:(前后)+128。(增加128只是为了获得更好的图像) 如白色箭头所示,存在影响所有对象的全局运动 因此,我需要对其进行估计,以便获得关于现场发生的情况的更有价值的信息。 我已经知道,opencv3.0在这方面很有帮助,它实现了一些方法来估计两个图像或两个点列表之间的主要运动。但到目前为止,我使用的是OpenCV 2.4.x,因为我的机器上已经安装了库,因此我正在寻找替代解决方案或任何其他符合我

这里有两张照片,一张是在外科医生采取行动前拍摄的,另一张是在手术后拍摄的

之前:

之后:

差异:(前后)+128。(增加128只是为了获得更好的图像)

如白色箭头所示,存在影响所有对象的全局运动

因此,我需要对其进行估计,以便获得关于现场发生的情况的更有价值的信息。

我已经知道,
opencv3.0
在这方面很有帮助,它实现了一些方法来估计两个图像或两个点列表之间的主要运动。但到目前为止,我使用的是
OpenCV 2.4.x
,因为我的机器上已经安装了库,因此我正在寻找替代解决方案或任何其他符合我要求的代码。

您正在寻找一种算法:

结果

cv::calcOpticalFlowFarneback(img1, img2, flowField, 0.5, 3, 10, 5, 5, 1.1)
在以下流场中,您可以清楚地看到变化:

对于全局运动检测:

  • 如果全局运动非常小(如示例中所示),则可以对运动向量设置阈值:丢弃小值
  • 如果它更大,找到主导运动矢量并从所有矢量中减去它。然后将小值丢弃

我将共享一个链接。它与视频有关,而不是前后图像对,但也许它可以给你一个想法。我建议你浏览一下这个博客上的其他帖子,可能会有一些对你有用的东西。你是怎么得到这个图片的?也许是用这个-是的。我想我交换了图像顺序,但使用上面发布的图像,这就是结果。配置是
cv::calcOpticalFlowFarneback(以前的图像,图像,流场,0.5,3,10,5,5,1.1)
,但我真的无法理解您是如何获得此图像的?这是我得到的链接显示了稀疏光流方法(例如,几个关键点的流)。Farneback光流直接作用于图像,因此返回每个像素的流矢量