如何用opencv (c++)捕捉滑鼠點選位置
阿新 • • 發佈:2019-01-22
這段程式碼的功能是:顯示圖片,並捕捉滑鼠在圖片上的點選位置。
(該功能常用於 標註圖片資料,是獲取機器學習的樣本資料的第一步)
#include <opencv2\opencv.hpp>#include<iostream>
using namespace cv;
using namespace std;
//三個全域性變數
IplImage *src;CvPoint points[6];
int pn = 0;
const char * ff;
//捕捉滑鼠位置
void on_mouse( int event, int x, int y, int flags, void* ustc)
{
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5, 0, 1, CV_AA);
if( event == CV_EVENT_LBUTTONDOWN )
{
CvPoint pt = cvPoint(x,y);
char temp[16];
sprintf(temp,"(%d,%d)",pt.x,pt.y);
cvPutText(src,temp, pt, &font, cvScalar(255, 255, 255, 0));
cvCircle( src, pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
cvShowImage( ff, src );
points[pn++] = pt;
//再次控制要獲取的滑鼠點的個數
if (pn >= 6){
cvShowImage(ff,src);
cvWaitKey(0);
cvDestroyWindow(ff);cvReleaseImage(&src);
pn=0;
}
}
}
//主函式,遍歷並顯示圖片,呼叫函式捕捉捕捉滑鼠位置。
int enumerateImages(){
string f = "D:\\test2\\reg\\0.jpg";
ff = f.c_str();
src = cvLoadImage(ff);
cvShowImage(ff,src);
cvSetMouseCallback( ff, on_mouse, 0 );
cvWaitKey(0);
return -1;
}