Opencv2
Opencv3
// 特征点
void FeatureAndCompare(cv::Mat srcImage1)
{
CV_Assert(srcImage1.data != NULL);
Mat c_src1 = srcImage1.clone();
// 转换为灰度
cv::Mat grayMat1;
cv::cvtColor(srcImage1, grayMat1, CV_RGB2GRAY);
//// 加强
equalizeHist(grayMat1, grayMat1);
//// 锐化
sharpenImage1(grayMat1, grayMat1);
//
cv::Ptr<cv::BRISK> ptrBrisk = cv::BRISK::create();
vector<KeyPoint> kp1;
Mat des1;//de or
ptrBrisk->detectAndCompute(grayMat1, Mat(), kp1, des1);
Mat res1;
int drawmode = DrawMatchesFlags::DRAW_RICH_KEYPOINTS;
drawKeypoints(c_src1, kp1, res1, Scalar::all(-1), drawmode);//画出特征点
//
//std::cout << \"size of de ion of Img1: \" << kp1.size() << endl;
//
namedWindow(\"drawKeypoints\", 0);
imshow(\"drawKeypoints\", c_src1);
cvWaitKey(0);
}
//brisk
void brisk_feature(Mat src1, Mat src2)
{
cv::cvtColor(src1, src1, CV_RGB2GRAY);
cv::cvtColor(src2, src2, CV_RGB2GRAY);
// 加强
equalizeHist(src1, src1);
equalizeHist(src2, src2);
// 锐化
//sharpenImage1(src1, src1);
//sharpenImage1(src2, src2);
Ptr<BRISK> brisk = BRISK::create();
vector<KeyPoint>keypoints1, keypoints2;
Mat de ors1, de ors2;
brisk->detectAndCompute(src1, Mat(), keypoints1, de ors1);
brisk->detectAndCompute(src2, Mat(), keypoints2, de ors2);
Mat dst1,dst2;
drawKeypoints(src1, keypoints1, dst1);
drawKeypoints(src2, keypoints2, dst2);
namedWindow(\"output1\", 0);
imshow(\"output1\", dst1);
waitKey();
namedWindow(\"output2\", 0);
imshow(\"output2\", dst2);
waitKey();
BFMatcher matcher;
vector<DMatch>matches;
matcher.match(de ors1, de ors2, matches);
Mat match_img;
drawMatches(src1, keypoints1, src2, keypoints2, matches, match_img);
namedWindow(\"match_img\", 0);
imshow(\"match_img\", match_img);
double minDist = 1000;
for (int i = 0; i < de ors1.rows; i++)
{
double dist = matches[i].distance;
if (dist < minDist)
{
minDist = dist;
}
}
printf(\"min distance is:%f\\n\", minDist);
vector<DMatch>goodMatches;
for (int i = 0; i < de ors1.rows; i++)
{
double dist = matches[i].distance;
if (dist < max(1.8*minDist, 0.02))
{
goodMatches.push_back(matches[i]);
}
}
Mat good_match_img;
drawMatches(src1, keypoints1, src2, keypoints2, goodMatches, good_match_img, Scalar::all(-1), Scalar::all(-1), vector<char>(), 2);
namedWindow(\"goodMatch\", 0);
imshow(\"goodMatch\", good_match_img);
waitKey(0);
}
继续阅读与本文标签相同的文章
下一篇 :
乘坐公共交通时,你习惯刷二维码还是NFC?
-
首个二类资源区平价光伏电站正式并网发电
2026-05-14栏目: 教程
-
AI+5G科技创新 视频行业呈现轻应用化趋势
2026-05-14栏目: 教程
-
1.98亿滴滴用户添加了紧急联系人 每天百万个订单行程分享给亲友
2026-05-14栏目: 教程
-
工程院院士刘韵洁:5G前景很大,但主要是行业应用
2026-05-14栏目: 教程
-
陆奇:看好5G技术,但应用好5G还需要时间
2026-05-14栏目: 教程
