событие мыши в opencv переполнении стека

Я хочу написать программу с этой функцией:

Когда пользователь нажимает левую кнопку мыши на окнах, круг
построен с радиусом 15

сначала я делаю черное изображение 500 * 500

тогда я использую setMouseCallback за my_mouse_callback и в функции my_mouse_callback Я пишу свой код круга, при запуске программы нет никаких ошибок, но есть только черное изображение 500 * 500, которое, когда я нажимаю левую кнопку мыши, ничего не происходит, я знаю, что у моей программы есть проблемы, но где? пожалуйста помогите мне моя программа такая:

void my_mouse_callback(int event, int x, int y, int flags, void* param);

int main() {
int i,j,k;

Mat image;
image.create(500,500,CV_8UC3);

namedWindow("amin");

for(i=0;i<500;i++){
for(j=0;j<500;j++){
for(k=0;k<3;k++){
Vec3b &intensity = image.at<vec3b>(j, i);
intensity.val[k]=0;
}
}
}

setMouseCallback( "amin", my_mouse_callback, &image );

imshow("amin",image);
waitKey(0);

return(0);
}

void my_mouse_callback( int event, int x, int y, int flags, void* param ) {
if(event==CV_EVENT_LBUTTONDOWN){
circle( image, Point(x,y), 20, Scalar(0xff,0xff,0xff) );
}
}

0

Решение

Похоже, это OpenCV, но я не использовал его, но:

Переменная image, конечно, не доступна из функции my_mouse_callback — она ​​локальна для main ()? Ты имеешь ввиду:

void my_mouse_callback( int event, int x, int y, int flags, void* param ) {
if(event==CV_EVENT_LBUTTONDOWN){
Mat* pImage = (Mat*)param;
Mat image = *pImage;
circle( image, Point(x,y), 20, Scalar(0xff,0xff,0xff) );
}
}

Если этот ответ глуп, я прошу прощения, но я не использовал CV, и это результат 30-секундного чтения документации.

1

Другие решения

Когда я использую opencv с версией 2.4.9, я вижу следующие ключевые события в
Модули / highgui / включить / opencv2 / highgui.hpp

enum
{
EVENT_MOUSEMOVE      =0,
EVENT_LBUTTONDOWN    =1,
EVENT_RBUTTONDOWN    =2,
EVENT_MBUTTONDOWN    =3,
EVENT_LBUTTONUP      =4,
EVENT_RBUTTONUP      =5,
EVENT_MBUTTONUP      =6,
EVENT_LBUTTONDBLCLK  =7,
EVENT_RBUTTONDBLCLK  =8,
EVENT_MBUTTONDBLCLK  =9
};

Итак, проверьте ваш исходный файл на правильность имени события.

0

замени это

imshow("amin",image);
waitKey(0);

с :

while(true){
imshow("amin",image);
waitKey(1);}  // 1ms
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector