視窗滑鼠事件的響應 在滑鼠視窗中繪製矩形的程式
阿新 • • 發佈:2019-01-25
這裡主要是訓練怎麼去響應滑鼠響應事件,那怎麼去定義滑鼠響應函式呢?
void CvMouseCallback(
int event;//滑鼠響應事件的型別如滑鼠右鍵彈起,右鍵按下,CV_EVENT_LBUTTONDOWN,CV_EVENT_LBUTTONDOWN)
int x,//滑鼠響應是所在的位置,這裡x,y是指畫素座標,所以與視窗的大小無關,它只是用畫素來定位
int y,
int falgs,//指定了每一個事件在發生時的不同狀態
void *param//這個引數由註冊滑鼠響應時間的時候傳入
)//cvMouseCallback名字是可以改變的,不準確,應該說必須改---
另外一個重要函式就是
CvSetMouseCallback(
const char*window_name,//視窗的名字,也就是你要捕獲哪個視窗的滑鼠響應事件
CvMouseCallback on_mouse,//你的滑鼠響應事件函式的名字
void * param=NULL//這個引數就是就是要傳進滑鼠響應事件的引數,在本例中,我使用的是將影象的地址傳進去
}
下面附上
結果如下:#include "cv.h" #include "highgui.h" #include "math.h" bool flag=false; CvRect box; void Mouse_Call_Back(int event,int x,int y,int flags,void *param) { IplImage *image = (IplImage*)param; // cvNamedWindow("test",1); //cvPoint start; switch(event) { case CV_EVENT_LBUTTONDOWN: box.x=x; box.y=y; break; case CV_EVENT_LBUTTONUP: box.width=abs(x-box.x); box.height=abs(y-box.y); cvRectangle(image,cvPoint(box.x,box.y),cvPoint(x,y),cvScalar(0,255,0)); // cvShowImage("test",image); break; } } int main() { cvNamedWindow("Mouse",1); IplImage * image =cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3); cvZero(image); cvSetMouseCallback("Mouse",Mouse_Call_Back,(void*)image); while(1) { int ch=cvWaitKey(33); if(ch==27) break; cvShowImage("Mouse",image); //注意顯示影象,你每一次都對影象進行修改,但是不顯示還是一樣的,你只有一隻輸出影象,我剛開始就是把這個放到外面了, } cvWaitKey(0); cvDestroyWindow("Mouse"); return 0; }