在視頻裏面畫矩形框並截取圖片

在視頻裏面用鼠標截取區域然後提取出來,可以用於以後在視頻或者攝像頭裏面截取有用信息。

#include <opencv2/opencv.hpp>
#include <math.h>
using namespace cv;
 
//全局變量
Mat g_ImageROI;
Rect g_rectangle;
Point g_startPoint;
Mat g_srcImage;
RNG g_rng(12345);
bool click_flag = 0;
 
void onMouse(int event, int x, int y, int flags, void* param)
{
	//鼠標移動事件
	if (event == EVENT_MOUSEMOVE)
	{
		if (click_flag == 1)
		{
			g_rectangle.x = MIN(g_startPoint.x, x);
			g_rectangle.y = MIN(g_startPoint.y, y);
			g_rectangle.width = abs(x - g_startPoint.x);
			g_rectangle.height = abs(y - g_startPoint.y);
			g_rectangle = g_rectangle & Rect(0, 0, g_srcImage.cols, g_srcImage.rows);
		}
	}
	
	//左鍵按下事件
	if (event == EVENT_LBUTTONDOWN)
	{
		g_startPoint.x = x;
		g_startPoint.y = y;
		click_flag = 1;
	}
 
	//左鍵彈起事件
	if (event == EVENT_LBUTTONUP)
	{
		click_flag = 0;
 
		//顯示感興趣區域的圖片
		g_ImageROI = g_srcImage(g_rectangle);
		namedWindow("截取的圖片", 0);
		imshow("截取的圖片", g_ImageROI);
	}
 
}
void main()
{
	VideoCapture cap(0);
 
	namedWindow("攝像頭", 0);
	setMouseCallback("攝像頭", onMouse);
 
	//按"Esc"退出
	while (waitKey(30) != 27)
	{
		cap >> g_srcImage;
 
		//畫矩形,邊框隨機顏色
		rectangle(g_srcImage, g_rectangle, cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)), 3);
		imshow("攝像頭", g_srcImage);
	}
	destroyAllWindows();
	cap.release();
}

效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章