您好,登錄后才能下訂單哦!
這篇文章主要講解了如何提取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中匹配點對的坐標有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。