OpenCV Return value from mouse callback function

opencv

Solution

You can avoid using global variables by passing a pointer to your data as a parameter to `setMouseCallback()`. Agree with @berek, just wanted to show a full example below to avoid confusion about global variables.

using namespace cv; 

void on_mouse( int e, int x, int y, int d, void *ptr )
{
    Point*p = (Point*)ptr;
    p->x = x;
    p->y = y;
}

in main() {
    Point p;
    namedWindow("window");
    Mat image = imread("someimage.jpg");
    imshow(image);


    //pass a pointer to `p` as parameter
    setMouseCallback("window",on_mouse, &p ); 

    // p will update with new mouse-click image coordinates 
    // whenever user clicks on the image window 
}

Problem

In OpenCV I want to return the point position like Point(x,y) to the main() function that I click on the image in the mouse callback function . Is there anyway other than setting a global variable? I don't want to write all the codes inside the on_mouse() function. Thanks

Original source