在Visual Studio中使用calcOpticalFlowPyrLK()函数

using calcOpticalFlowPyrLK() function in visual studio

本文关键字:calcOpticalFlowPyrLK 函数 Visual Studio      更新时间:2023-10-16

我正在尝试在Visual Studio中测试calcOpticalFlowPyrLK() int c ++,但是我在编写代码时遇到了一些问题。我使用 FAST 算法获取我的 2 张图像的关键点。这是我代码的相关部分:

    Mat im1, im1gray, im2, im2gray;
    vector<KeyPoint> keypoints1;
    vector<KeyPoint> keypoints2;
    im1=imread("C:\Users\Dániel\Desktop\1.png", 1);
    im2=imread("C:\Users\Dániel\Desktop\2.png", 1);
    cvtColor(im1, im1gray, CV_RGB2GRAY);
    FAST(im1gray, keypoints1, 100, true);
    cvtColor(im2, im2gray, CV_RGB2GRAY);
    FAST(im2gray, keypoints2, 100, true);
    vector<char> status;
    vector<float> error;
    calcOpticalFlowPyrLK(im1, im2, keypoints1, keypoints2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001); 

我的问题是当我尝试运行代码的最后一个命令时,我收到一条错误消息(KLT 中0x74fc4b32处未处理的异常.exe:Microsoft C++异常:cv::内存位置 0x008de7ac..) 的异常。任何人都可以告诉我问题是什么吗?提前感谢!

calcOpticalFlowPyrLK适用于vector<Point2f>,而不是vector<KeyPoint>。您应该将关键点数组转换为带有坐标的数组:

vector<Point2f> pt1, pt2;
KeyPoint::convert(keypoints1, pt1);
KeyPoint::convert(keypoints2, pt2);
calcOpticalFlowPyrLK(im1, im2, pt1, pt2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001);