2017-11-11 8 views
0

これはopenCVでMouseEventを設定しようとした私の試みですが、私の主張はマウスイベントに応じて特定の点に何かを描くことです。どのようなアイデアが間違っている? 私はこのチュートリアルに従っ:https://docs.opencv.org/3.3.0/db/d5b/tutorial_py_mouse_handling.htmlマウスをペイントブラシとして使用する

 #include<opencv2\core\core.hpp> 
     #include<opencv2\imgproc\imgproc.hpp> 
     #include<opencv2\highgui\highgui.hpp> 
     #include<opencv2\ml\ml.hpp> 
     #include<iostream> 
     #include<conio.h> 
     using namespace std; 
     using namespace cv; 
     int radius = 5; 
     Mat img; 
     int ix = 1; 
     int iy = 1; 
     //mouse callback function 
     void drawCircle(int event, int x, int y, int, void* param) { 
      if (event == CV_EVENT_LBUTTONDOWN) 
      { 
       cout << "x = " << x 
        << "\t y = " << y 
        << endl; 
       circle(img, Point(x, y), 10, Scalar(255,255,255), 10); 
      } 
      //line(img, Point(10, 10), Point(x, y), Scalar(0, 0, 255), 3); 
     } 
     int main() { 
      img = imread("image.png"); 
      if (img.empty()) { 
       cout << "\nerror reading image" << endl; 
       _getch(); 
       return -1; 
      } 
      namedWindow("Image",1); 
      imshow("Image", img); 
      setMouseCallback("Image", drawCircle); 
      waitKey(0); 
      return 0; 
     } 

は、なぜそれが私のイメージの上に円または線を描画しないのですか?ありがとう!

答えて

0

変更を反映するには、ウィンドウを強制的に再描画する必要があります。私。以下のようなもので、あなたのwaitKey(0)を置き換えます。また

while (waitKey(20) != 27) // wait until ESC is pressed 
{ 
    imshow("Image", img); 
} 

、あなただけのdrawCircleコールバックに関数imshowの呼び出しを追加することができるかもしれません。

+0

ご回答いただきありがとうございます。悲しいことに、私はあなたの答えをアップアップするのに十分な特権を持っていません。私はwaitKey(20)!= 27(ESC)に変更することで、あなたのコードはすぐにウィンドウを閉じるようにしました。まだ提案に感謝します。 –

+0

ありがとう、私はあなたの修正に変更しました。投票について心配しないでください:-) –

関連する問題