2013-02-03 34 views
0

我正在嘗試使用OpenCV 2.4.3(VS 2010)在用戶接受的輸入(通常是中心)上顯示圓圈。在輸出圖像上(使用'namedWindow'顯示),當一個圓點標記點時,圓圈似乎會逐列移位。不知道我應該如何糾正這一點。在OpenCV中顯示錯誤座標的用戶輸入

代碼:

struct OPTIONS{ 
     OPTIONS(): X(-1), Y(-1), drawing_dot(false){} 
     int X; 
     int Y; 
     bool drawing_dot; 
    }; 
    OPTIONS options; 
    void my_mouse_callback(int event, int x, int y, int flags, void* param){ 

     IplImage* image = (IplImage*) param; 

     switch(event){ 

     case CV_EVENT_LBUTTONDOWN: 
      options.X = x; 
      options.Y = y; 
      options.drawing_dot = true; 
      break; 
     default: 
      break; 
     } 
    } 
    int main(void){ 
     IplImage* image = cvLoadImage("Images/TestRealData/img1.bmp"); 
     Mat frame = imread("Images/TestRealData/img1.bmp"); 
     namedWindow("Test", CV_WINDOW_KEEPRATIO); 
     cvSetMouseCallback("Test", my_mouse_callback, (void*) image); 
     while(cvWaitKey(15) != 27){ 
      if(options.drawing_dot){ 
       circle(frame, Point(options.X,options.Y), 3, CV_RGB(0,0,255), 2); 
       options.drawing_dot = false; 
      } 
      imshow("Test", frame); 
      waitKey(10); 
     } 
     cvReleaseImage(&image); 
     return 0; 
    } 

回答

1

找到答案後,失去了很多時間 -

請確保在'namedWindow'中指定標誌。將標誌更改爲CV_WINDOW_KEEPRATIO爲我做了訣竅。希望這可以幫助那裏的人。

2

我想圓不移位。鼠標光標可能欺騙我們的眼睛。你可以簡單地通過增加半徑檢查,並降低像圓輪廓的厚度:

circle(frame, Point(options.X, options.Y/2), 15, CV_RGB(0, 0, 255), 1); 

順便說一句,我認爲,如果你想畫的時候,你點擊這個圈子,options.Y不應該除以2.

+1

感謝您花時間瀏覽代碼。是的,'options.Y/2'確實是一個錯誤,但我忘了在這裏更新更改。現在已經這樣做了。另外,我發現我錯了 - 我沒有提到'namedWindow'的任何標誌。改變這個伎倆。再次感謝! – Pranjal

相關問題