codecamp

OpenCV检测平面物体

本教程的目标是学习如何使用features2d和calib3d模块来检测场景中已知的平面对象。

测试数据:使用数据文件夹中的图像,例如box.png和box_in_scene.png。

  • 创建一个新的控制台项目。读取两个输入图像:
Mat img1 = imread(argv [1],IMREAD_GRAYSCALE);
Mat img2 = imread(argv [2],IMREAD_GRAYSCALE);

  • 检测两个图像中的关键点,并为每个关键点计算描述符。:

// detecting keypoints
Ptr<Feature2D> surf = SURF::create();
vector<KeyPoint> keypoints1;
Mat descriptors1;
surf->detectAndCompute(img1, Mat(), keypoints1, descriptors1);

... // do the same for the second image

  • 现在,找到从第一个图像到第二个图像之间的描述符之间的最接近的匹配:

// matching descriptors
BruteForceMatcher<L2<float> > matcher;
vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);

  • 可视化结果:

// drawing the results
namedWindow("matches", 1);
Mat img_matches;
drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
imshow("matches", img_matches);
waitKey(0);

  • 找到两组点之间的单变图:

vector<Point2f> points1, points2;
// fill the arrays with the points
....
Mat H = findHomography(Mat(points1), Mat(points2), RANSAC, ransacReprojThreshold);
  • 创建一组inlier匹配并绘制它们。使用perspectiveTransform函数映射点与单应性:

      Mat点1投影; 透视变换(Mat(points1),points1Projected,H);

  • 使用drawMatches绘制inliers。


Features2D+Homography查找已知对象
AKAZE本地功能匹配
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OpenCV教程

OpenCV高级GUI和媒体(highgui模块)

OpenCV图像输入和输出(imgcodecs模块)

对象检测(objdetect模块)

计算摄影(照片模块)

图像拼接(拼接模块)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }