Opencv下影象對滑鼠事件的響應
阿新 • • 發佈:2019-02-14
直接上程式碼:
執行結果如下://////////////////////////////////////////////////////////////////////// // // 該程式從檔案中讀入一幅影象,響應在圖片上的左鍵右鍵訊息 // 並顯示點選影象的座標,然後顯示出來. // //////////////////////////////////////////////////////////////////////// #include <stdlib.h> #include <stdio.h> #include <math.h> #include <cv.h> #include <highgui.h> #include <windows.h> //定義滑鼠響應訊息函式mouseHandler函式名可以自己設定,event為滑鼠響應事件 /*event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN, CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP, CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK, CV_EVENT_MOUSEMOVE */ //x,y為相對於圖片左上角的畫素座標 /*flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY, CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON */ //void* param為使用者的值傳給滑鼠響應函式mouseHandler void mouseHandler(int event, int x, int y, int flags, void* param) { switch(event){ case CV_EVENT_LBUTTONDOWN: printf("Left button down.PixPoint(%d,%d)\n",x,y); break; case CV_EVENT_RBUTTONDOWN: printf("Right button down.PixPoint(%d,%d)\n",x,y); break; case CV_EVENT_MBUTTONDOWN: if(flags&CV_EVENT_FLAG_CTRLKEY) printf("Middle button down and ctrl is press at the same time.PixPoint(%d,%d)\n",x,y); break; } } int main(int argc, char *argv[]) { IplImage* img = 0; //定義影象檔案指標,指向載入的原始影象 int height,width,channels; //定點陣圖像的長度(畫素),寬頻(畫素),通道數(指每個畫素用多少個位元組表示) uchar *data; //儲存影象具體的畫素資料 char Image_Filename[20]; //輸入影象檔案的檔名 printf("Please input the filename of image:\n"); scanf("%s",Image_Filename); img=cvLoadImage(Image_Filename,0); //載入影象函式,第一個引數為影象名稱.第二個引數為輔助引數, //有正,零,負三種值.正數表示以三通道影象載入(三通道即一個畫素用3個位元組表示),0表示 //以單通道載入影象,負數代表載入影象的通道數由影象本身決定. if(!img) { printf("Could not load image file: %s\n",argv[1]); exit(0); } cvNamedWindow("mainWin", 0); //建立一個名稱為mainWin的視窗,用於顯示影象.CV_WINDOW_AUTOSIZE值為1 //表示固定視窗大小,若第二個引數為0表示視窗大小可變,影象也會隨著視窗的大小而改變 cvMoveWindow("mainWin", 0, 0); //設定視窗的位置,第一個引數為視窗的名字,後面兩個引數為視窗顯示的位置,(0,0)表示顯示在桌面的左上角. cvSetMouseCallback("mainWin",mouseHandler,NULL); //註冊滑鼠事件處理函式,一個引數為要響應改函式的視窗名,第二個引數自定義的滑鼠事件 //處理函式,最後一個為使用者需要傳給滑鼠事件處理函式的值,不需要傳遞則設為NULL cvShowImage("mainWin", img ); //在之前建立的mainWin視窗中顯示影象 cvWaitKey(0); //等待敲擊鍵盤,結束程式 cvReleaseImage(&img ); //釋放影象檔案指標 return 0; }
轉載請註明:小劉