Я пытался получить информацию о пикселях, на которые я нажимаю. Я использовал функцию SetMouceCallback и, честно говоря, я точно не знаю, как она работает.
void startGUI()
{
VideoCapture video;
Mat frame1;
video.open("/Users/Dominik/Desktop/Legia22.mov");
video.read(frame1);
Mat img = frame1.clone();
namedWindow("My Window", 1);
setMouseCallback("My Window", onMouse, &img);
imshow("My Window", img);
//********* I want to use leftClicks[] here
waitKey(0);
}
static void onMouse(int event, int x, int y, int, void* param)
{
Mat &img = *((Mat*)param);
static int counter=0;
Point leftClicks[4];
if ( event == EVENT_LBUTTONDOWN && counter<4)
{
Vec3b val = img.at< Vec3b >(y,x);
cout << "left button clicked pos - (" << x << ", " << y << ")" <<"\t colour bgr: "<< val << endl;
leftClicks[counter].x = x;
leftClicks[counter].y = y;
circle(img, Point(x,y), 4, SCALAR_BLUE, -1);
imshow("My Window", img);
counter++;
}
}
Следующий код работает нормально. Показано окно и на первом кадре я могу нарисовать 4 круга. Точки напечатаны в терминале. Поэтому в основном я пытаюсь получить массив leftClicks [4] из функции для дальнейшей обработки в других функциях, например. где ******. Проблема в том, что тип функции onMouse должен быть пустым, а аргументы не могут быть изменены.
Я заметил, что функция setMouseCallback довольно точно определила, какой должна быть функция onMouse, и никакие изменения в функции onMouse не могут быть сделаны ...
Так, как я могу получить массив leftClicks [] из функции onMouse?