我正在尝试在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.exe中的0x74fc4b32处的未处理异常:Microsoft C ++异常:cv ::内存位置0x008de7ac处的异常...)。任何人都可以告诉我这是什么问题吗?提前谢谢!
答案 0 :(得分:1)
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);