Проблема с получением информации о пикселях с помощью SetMouseCallback, c ++, OpenCV - PullRequest
0 голосов
/ 18 марта 2020

Я пытался получить информацию о пикселях, на которые я нажимаю. Я использовал функцию 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...