我正在尝试使用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;
}
答案 0 :(得分:2)
我认为圈子不会改变。鼠标光标可能会欺骗我们的眼睛。您可以通过增加半径并减小圆形轮廓的粗细来检查它,如:
circle(frame, Point(options.X, options.Y/2), 15, CV_RGB(0, 0, 255), 1);
顺便说一下,我想如果你想在点击的位置绘制圆圈,options.Y
不应该除以2。
答案 1 :(得分:1)
在丢失很多时间后找到答案 -
确保在'namedWindow'中指定标志。将标志更改为CV_WINDOW_KEEPRATIO对我来说很有用。希望这有助于那里的人。