最近在做一个水岸线检测的程序,根据原图以及翻转图的特征点匹配并通过公式计算水岸线位置。
但在做特征点匹配时一直出错,出错如下图,有没有大佬提供一下解决方法?
实在运行不起来,之前的ptr列表都没有,很多变量也没做声明,您这么问还是另请高明,我是解决不了
跑一下这段代码试试
#include "highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/legacy/legacy.hpp"
#include
using namespace cv;
using namespace std;
int main()
{
Mat image01 = imread("1.jpg", 1);
Mat image02 = imread("2.jpg", 1);
namedWindow("p2", 0);
namedWindow("p1", 0);
imshow("p2", image01);
imshow("p1", image02);
//灰度图转换
Mat image1, image2;
cvtColor(image01, image1, CV_RGB2GRAY);
cvtColor(image02, image2, CV_RGB2GRAY);
//提取特征点
SiftFeatureDetector siftDetector(2000); // 海塞矩阵阈值,在这里调整精度,值越大点越少,越精准
vector<KeyPoint> keyPoint1, keyPoint2;
siftDetector.detect(image1, keyPoint1);
siftDetector.detect(image2, keyPoint2);
//特征点描述,为下边的特征点匹配做准备
SiftDescriptorExtractor SiftDescriptor;
Mat imageDesc1, imageDesc2;
SiftDescriptor.compute(image1, keyPoint1, imageDesc1);
SiftDescriptor.compute(image2, keyPoint2, imageDesc2);
//获得匹配特征点,并提取最优配对
FlannBasedMatcher matcher;
vector<DMatch> matchePoints;
matcher.match(imageDesc1, imageDesc2, matchePoints, Mat());
cout << "total match points: " << matchePoints.size() << endl;
Mat img_match;
drawMatches(image01, keyPoint1, image02, keyPoint2, matchePoints, img_match);
imshow("match",img_match);
imwrite("match.jpg", img_match);
waitKey();
return 0;
}
代码我带过来了...
Mat LRGBR;
cvtColor(rectifyImageL, LRGBR, CV_GRAY2BGR);
Mat LDesc,LFDesc;
flip(LRGBI, LF, 0);
Ptr akaze = AKAZE::create();
vector keyPoint1, keyPoint2;
akaze->detectAndCompute(LRGBI, noArray(), keyPoint1, LDesc);
akaze->detectAndCompute(LF, noArray(), keyPoint2, LFDesc);
FlannBasedMatcher matcher;
vector FlannMatches;
Ptr FlannMatcher = FlannBasedMatcher::create();
FlannMatcher->match(LDesc, LFDesc, FlannMatches);
cout << "total match points: " << FlannMatches.size() << endl;
Mat img_match;
drawMatches(LRGBI, keyPoint1, LF, keyPoint2, FlannMatches, img_match);
namedWindow("match", 0);
imshow("match", img_match);
imwrite("match.jpg", img_match);
waitKey();
顺带一提..我要用的是纯opencv...就是不加附加库的...因为是3.4版本的,所以只有akaze算法能用...surf,sift之类的无法使用..请问能调试出来吗
好吧,不用了。。我找到另一种算法解决问题了。。