opencv-鼠标框选矩形区域并输出尺寸

全部代码

#include<opencv2\opencv.hpp>
#include <stdio.h>  
using namespace cv;
using namespace std;
Mat org, dst, img, tmp;
void on_mouse(int event, int x, int y, int flags, void *)
{
    
    
	static Point pre_pt = (0, 0);
	static Point cur_pt = (0, 0);
	if (event == EVENT_LBUTTONDOWN)
	{
    
    
		pre_pt = Point(x, y);
	}
	else if (event == EVENT_MOUSEMOVE && flags)//摁下左键,flags为1 

	{
    
    
		org.copyTo(tmp);
		cur_pt = Point(x, y);
		circle(tmp, cur_pt, 4, Scalar(0, 255, 0, 0), 2, 8);
		rectangle(tmp, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
		
		imshow("img", tmp);//画的时候显示框
	}
	else if (event == EVENT_LBUTTONUP)
	{
    
    
		org.copyTo(img);
		rectangle(img, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
		imshow("img", img);//画完后显示框
		int width = abs(pre_pt.x - cur_pt.x);
		int height = abs(pre_pt.y - cur_pt.y);
		dst = org(Rect(min(cur_pt.x, pre_pt.x), min(cur_pt.y, pre_pt.y), width, height));
		cout << "x=" << pre_pt.x << "y=" << pre_pt.y << "width=" << width << "height=" << height << endl;
		namedWindow("dst");
		imshow("dst", dst);

	}

}

int main() {
    
    
	org = imread("D:/images/111.jpg");
	org.copyTo(img);
	namedWindow("img");
	imshow("img", img);
	setMouseCallback("img", on_mouse, 0);
	/*	waitKey();
	cvtColor(dst, dst, CV_BGR2GRAY);
	imshow("gray", dst);*/
	waitKey(0);
}

猜你喜欢

转载自blog.csdn.net/weixin_51244852/article/details/120470208
今日推荐