c++ - 简单密集光流程序 calcOpticalFlowFarneback() openCV 3.2 cpp

标签 c++ visual-studio opencv opticalflow

我无法运行这个简单的代码。我正在尝试计算 2 张图片之间的光流。

请检查附件

OpenCV Error: Assertion failed (prev0.size() == next0.size() && prev0.channels() == next0.channels() && prev0.channels() == 1 && pyrScale_ < 1) in cv::`anonymous-namespace'::FarnebackOpticalFlowImpl::calc, file C:\Users\krato\Desktop\OpenCV\opencv-master\modules\video\src\optflowgf.cpp, line 1114

#include <Windows.h>
#include "opencv2\highgui.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2/video/tracking.hpp"
#include <vector>
#include <stdio.h>
#include <Windows.h>    
#include <iostream>
    using namespace std;
    using namespace cv;

    // Display the results of the matches
    //
    int main(int argc, char* argv[])
    {
        cv::Mat img1 = cv::imread(argv[1], cv::IMREAD_GRAYSCALE);
        cv::Mat img2 = cv::imread(argv[2], cv::IMREAD_GRAYSCALE);
        cv::Mat res;

        cv::calcOpticalFlowFarneback(img1,img2,img1,.4,1,12,2,8,1.2, 0);

        cv:imshow("cat", res);
        cv::waitKey(0);


    }

Error Picture 1

Error Picture 2

最佳答案

断言是因为 img1img2 的大小不同。在您提供的第一张图片中,可以清楚地看到 img1 有 762 行,img2 有 768 行。
尝试使用 cv::resize 使 img2 的大小与 img1 相同。在 cv::calcOpticalFlowFarneback() 之前添加以下行。
cv::resize(img2, img2, img1.size());

关于c++ - 简单密集光流程序 calcOpticalFlowFarneback() openCV 3.2 cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482959/

相关文章:

c++ - 我不明白声明 avl 树时的错误信息

c# - Visual Studio (xamarin) 在执行此操作时卡在后台运行的 AAPT.exe 的每个构建、清理或重建上

java - opencv java中的 mask 图像

c++ - boost::copy_graph 的vertex_copy 是如何工作的?

c++ - 如何单独处理子ListBox WndProc?

c# - 如何将文本框的值设置到 Crystal 报表的公式字段中

asp.net - 使用 ListBox 在 Visual Studio 2010 中过滤网格

opencv - 检测图像的模糊程度

c++ - 具有 const cv::Mat 类型的参数在功能上会发生变化吗?

c++ - 我的 Prim 算法 (MST) 在矩阵中的运行速度比在列表中快得多