用opencv实现截图

  • Post author:
  • Post category:其他



关于鼠标操作的参数和api参考网址

#include<opencv2\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;
Point pt;
bool flag = false;
Mat ROI;
Mat img = imread("E:\\OpenCV\\images\\fqy2.jpg");//原图片
Mat src = img.clone();//用于出现多个矩形叠加
void OnChange(int event, int x, int y, int flags, void *param) {
	Mat &img = *(Mat *)param;
	if (event == 1 && flags == 1) {//左键点击
		flag = true;
		pt.x = x;
		pt.y = y;
	}
	else if (event == 0 && flags == 1) {
	//左键拖动,注意区别鼠标移动和左键拖动的区别,这里改成鼠标移动代码无法正常运行
		if (flag) {
			src.copyTo(img);
			rectangle(img, pt, Point(x, y), Scalar(255, 0, 0), 2);
			imshow("pic", img);
		}
	}
	else if (event == 4) {//左键弹起
		flag = false;
		ROI = src(Rect(pt.x, pt.y, x - pt.x, y - pt.y));
		imshow("pic", ROI);
		imwrite("E:\\OpenCV\\images\\fqy1.jpg", ROI);//输出路径
	}

}
int main()
{
	namedWindow("pic", WINDOW_AUTOSIZE);
	setMouseCallback("pic", OnChange, &img);
	imshow("pic", img);
	waitKey(0);
}



版权声明:本文为qq_44954571原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。