visual-c++ - 用户输入显示在OpenCV中的错误坐标处

标签 visual-c++ opencv

我正在尝试使用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;
    }

最佳答案

我认为圈子不会改变。鼠标光标可能会欺骗我们的眼睛。您可以通过增加半径并减小圆形轮廓的厚度来简单地进行检查,例如:

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

顺便说一句,我想如果您想在单击的位置绘制圆,options.Y不应除以2。

关于visual-c++ - 用户输入显示在OpenCV中的错误坐标处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676687/

相关文章:

c++ - 带有重音符号 [í é] 的西类牙字母显示为奇怪的符号

visual-studio-2010 - 如何正确卸载 C++ Shell 扩展 DLL

c++ - 如何创建旋转的矩形或多边形 ROI/mask?

Python + opencv 与 PyCharm- 'opencv' 没有属性 'imread'

python - 如何在Google Colab中显示点击图片的点的坐标?

c++ - SFINAE 的类型名称关键字

c++ - 创建 HWND 的最简单方法

c++ - 如何查询来自vc++项目的http请求

c++ - 在 OpenCV/C++ 中使用 KalmanFilter 跟踪多个移动物体 - 如何将轨迹单独分配给检测到的物体

c++ - 多视角人脸检测