Я хочу написать программу с этой функцией:
Когда пользователь нажимает левую кнопку мыши на окнах, круг
построен с радиусом 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) );
}
}
Похоже, это 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-секундного чтения документации.
Когда я использую 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
};
Итак, проверьте ваш исходный файл на правильность имени события.
замени это
imshow("amin",image);
waitKey(0);
с :
while(true){
imshow("amin",image);
waitKey(1);} // 1ms