#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 版权协议,转载请附上原文出处链接和本声明。