这篇文章主要讲解了如何提取opencv中匹配点对的坐标,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
在opencv中,特征检测、描述、匹配都有集成的函数。vector<DMatch> bestMatches;用来存储得到的匹配点对。那么如何提取出其中的坐标呢?
int index1, index2;
for (int i = 0; i < bestMatches.size(); i++)//将匹配的特征点坐标赋给point
{
index1 = bestMatches.at(i).queryIdx;
index2 = bestMatches.at(i).trainIdx;
cout << keyImg1.at(index1).pt.x << " "
<< keyImg1.at(index1).pt.y << " "
<< keyImg2.at(index2).pt.x << " "
<< keyImg2.at(index2).pt.y << endl;
}
补充知识:OpenCV 如何获取一个连通域中的所有坐标点
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int main(int argc, char* argv[])
{
IplImage* img;
img = cvLoadImage("D:\\OOTT\\WEEK5\\2.png");
IplImage* gray = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvCvtColor(img,gray,CV_BGR2GRAY);
cvThreshold(gray,gray,128,255,CV_THRESH_BINARY);
CvMemStorage* storage = cvCreateMemStorage();
CvSeq * first_contour = NULL;
int Ncontour = cvFindContours(gray,storage,&first_contour,sizeof(CvContour),CV_RETR_LIST);
//Ncontour为cvFindContours函数返回的轮廓个数
for(CvSeq* c = first_contour;c!= NULL;c=c->h_next)
{
// cvDrawContours(img,c,cvScalar(255,255,0),cvScalar(255,0,255),0,2,8);
cvNamedWindow("contours",CV_WINDOW_AUTOSIZE);
// cvShowImage("contours",img);
for(int k = 0;k <c->total;++k)
{
CvPoint* p = CV_GET_SEQ_ELEM(CvPoint,c,k);
printf("(%d,%d)\n",p->x,p->y);
}
CvRect rect;
rect = cvBoundingRect(c,0);
cvFloodFill(img,cvPoint(img->width/2,img->height/2),cvScalar(255,255,255),cvScalar(20),cvScalar(20),NULL,4,NULL);
cvShowImage("contours",img);
int Num[500][500];
for (int i=0;i<(img->height-5);i++)
for (int j=0;j<(img->width-5);j++)
{
CvScalar S0;
S0=cvGet2D(img,i,j);
if(S0.val[0] == 255)
Num[i][j]=1;
else
Num[i][j]=0;
printf("(%d,%d)\n",i,j);
}
}
cvWaitKey(0);
cvReleaseImage(&img);
cvReleaseImage(&gray);
cvDestroyWindow("contours");
return 0;
}
看完上述内容,是不是对如何提取opencv中匹配点对的坐标有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。