0

OpenCV 2.4.3 (VS 2010) を使用して、ユーザーが受け入れた入力 (通常は中心) に円を表示しようとしています。出力画像 ('namedWindow' を使用して表示) では、円は列に沿ってポイントをマークしているため、列方向にシフトしているように見えます。これをどのように修正すればよいかわかりません。

コード:

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

2 に答える 2

2

円はずれないと思います。マウスカーソルは私たちの目を欺くかもしれません。次のように、半径を増やして円の輪郭の太さを減らすだけで確認できます。

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

ちなみに、クリックした位置に円を描きたい場合は、options.Y2で割らない方がいいと思います。

于 2013-02-04T04:50:39.773 に答える
1

多くの時間を失った後に答えが見つかりました-

「namedWindow」でフラグを指定してください。フラグを CV_WINDOW_KEEPRATIO に変更するとうまくいきました。これが誰かを助けることを願っています。

于 2013-05-08T06:46:14.597 に答える