1. 程式人生 > >如何用opencv (c++)捕捉滑鼠點選位置

如何用opencv (c++)捕捉滑鼠點選位置

這段程式碼的功能是:顯示圖片,並捕捉滑鼠在圖片上的點選位置。

(該功能常用於 標註圖片資料,是獲取機器學習的樣本資料的第一步)

#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;
}