Перейти к содержимому
Compvision.ru
ProgRoman

События мыши

Recommended Posts

Добрый день вот написал вроде бы обычный обработчик тыкаю по изображению мышкой и должны появляться круги разного цвета, но что-то ничего не появляется подскажите что не так


#include "stdafx.h"


#include <opencv2/video/tracking.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>


#include <iostream>

#include <ctype.h>


using namespace cv;

using namespace std;


Mat img = Mat::zeros(640,480,CV_8UC3);


const int num_features = 2;


struct TFeature

{

	Point pt;//int pt[num_features];

	int value;

};


typedef vector<TFeature> TFeatureList;

TFeatureList points;


void Update(void)

{

	cout<<"------\n";

	for(int i=0; i<points.size(); i++)

	{

		if(points[i].value == 0)

		{

			circle(img,points[i].pt,3,CV_RGB(0,255,0),1);

		}

		else

		{

			circle(img,points[i].pt,3,CV_RGB(255,0,0),1);

		}

		cout<<i<<" : "<<points[i].pt.x<<" ; "<<points[i].pt.y<<" = "<<points[i].value<<"\n";

	}

}


void on_mouse(int event, int x, int y, int , void* )

{

	if(img.empty()) return;

	//if(img.)

	TFeature pts;

	if(event == CV_EVENT_LBUTTONDOWN)

	{

		pts.pt = Point(x,y);

		pts.value = 0;

		points.push_back(pts);

		img = Mat::zeros(640,480,CV_8UC3);

		Update();

	}


	if( event == CV_EVENT_RBUTTONDOWN)

	{

		pts.pt = Point(x,y);

		pts.value = 1;

		points.push_back(pts);

		img = Mat::zeros(640,480,CV_8UC3);

		Update();

	}

}


int main( int argc, char** argv )

{

	namedWindow("test",1);	

	setMouseCallback("test",on_mouse,0);

	imshow("test",img);

	waitKey(0);

        return 0;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конечно не появятся, нужно бы зациклить программу. Что-то типа такого:


...
int c=0;
for(;c!='q';)
{
imshow("test",img);
c=waitKey(10);
}
...
[/code]

т.к. события обрабатываются в функции waitKey.

И еще, несколько раз сам попадался по невнимательности на том, что если не вызывать waitKey, то окно с изображением обновляться не будет, и кажется, что программа ничего не делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×