天天看點

OpenCV畫矩形

#include <opencv2/opencv.hpp>
using namespace cv;

Rect select;
bool select_flag = false;
Point origin;
Mat frame;

void onMouse(int event, int x, int y, int flags, void* param)
{
	if (select_flag)
	{
		select.x = MIN(origin.x, x);
		select.y = MIN(origin.y, y);
		select.width  = abs(origin.x - x);
		select.height = abs(origin.y - y);
		select = select & Rect(0, 0, frame.cols, frame.rows);
	}
	if (event == CV_EVENT_LBUTTONDOWN)
	{
		select_flag = true;
		origin = Point(x, y);
		select = Rect(x, y, 0, 0);
	} 
	else if (event == CV_EVENT_LBUTTONUP)
	{
		select_flag = false;
	}
}

int main()
{
	VideoCapture cap(0);

	namedWindow("camera");
	setMouseCallback("camera", onMouse);

	while(1)
	{
		cap >> frame;
		rectangle(frame, select, Scalar(255, 0, 0), 3);
		imshow("camera", frame);
		if (waitKey(10) == 27) break;
	}

	return 0;
}