Работа с мышью: расположение пикселя печати - PullRequest
1 голос
/ 13 мая 2011

Я пытался поработать с OpenCV в VS2010, особенно в области работы с мышью. Пока у меня есть это:

CV_EVENT_LBUTTONDOWN
        :drawing_line = true;
        cvLine( frame, cvPoint(x,y),cvPoint(350,500), CV_RGB(255,0,0), CV_AA, 15,0 );
        fprintf( stdout, "Point found. %i, %i \n", object_x0, object_y0 );
        break;

То, что я хочу сделать, это вернуть местоположение пикселей, на которые я нажал, но все, что он возвращает, это «Точка найдена. 0,0» вместо фактического местоположения. В конце концов, я хотел бы использовать точки с cvLine, чтобы нарисовать линию, но сейчас я просто хотел бы получить некоторые значения, возвращаемые мне. Любые предложения будут высоко ценится. Спасибо!

Ответы [ 2 ]

3 голосов
/ 25 февраля 2013

Положение щелчка мыши можно получить, передав его в качестве параметра функции обратного вызова мыши, например:

void onMouse(int evt, int x, int y, int flags, void* param) {
    if(evt == CV_EVENT_LBUTTONDOWN) {
        cv::Point* ptPtr = (cv::Point*)param;
        ptPtr->x = x;
        ptPtr->y = y;
    }
}

int main() {
    cv::Point2i pt(-1,-1);
    cv::namedWindow("Output Window");
    frame = cv::imread("image.jpg");
    cv::imshow(winName, frame);

    cv::setMouseCallback(winName, onMouse, (void*)&pt);
    // Note that we passed '&pt' (a pointer
    // to `pt`) to the mouse callback function.
    // Therefore `pt` will update its [x,y] coordinates
    // whenever user left-clicks on the image in "Output Window".
}
0 голосов
/ 21 декабря 2012

Точки передаются в качестве аргументов функции обратного вызова Mouse.

void onMouse(int event, int x, int y, int flags, void* param)

Вы хотите сохранить эти x, y в глобальном, когда вы нажимаете вниз, а в другом глобальном, когда вы нажимаете вверх., а затем проведите линию между ними.

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