本文共 873 字,大约阅读时间需要 2 分钟。
#include#include 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);}
转载地址:http://qkmzi.baihongyu.com/