OpenCV找出最小外接矩形

Posted 朱铭德

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV找出最小外接矩形相关的知识,希望对你有一定的参考价值。

惯例先放结果吧



测试图片盗取自:  地址  (2333)


其实就一行关键的代码:

RotatedRect rect = minAreaRect(contours[i]);


下面就是简单粗暴的代码啦~~


#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main()

	Mat 原图 = imread("1.jpg");
	imshow("原图", 原图);
	Mat 灰度图,二值图;
	cvtColor(原图, 二值图, CV_BGR2GRAY);
	//blur(灰度图, 二值图, Size(5, 5));//模糊一下,可以不要
	threshold(二值图, 二值图, 0, 255, CV_THRESH_OTSU);//自适应二值化
	二值图 = 255 - 二值图;//颜色反转
	//imshow("二值图", 二值图);

	//寻找最外层轮廓  
	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;
	findContours(二值图, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point());

	Mat 画布 = Mat::zeros(二值图.size(), CV_8UC1); //最小外接矩形画布  
	for (int i = 0; i<contours.size(); i++)
	
		//绘制轮廓  
		drawContours(画布, contours, i, Scalar(255), 1, 8, hierarchy);

		//绘制轮廓的最小外结矩形  
		RotatedRect rect = minAreaRect(contours[i]);
		//rectangle(画布,rect.boundingRect(),Scalar(55));
		Point2f P[4];

		rect.points(P);
		for (int j = 0; j <= 3; j++)
		
			line(原图, P[j], P[(j + 1) % 4], Scalar(0,0,255), 1);
			line(画布, P[j], P[(j + 1) % 4], Scalar(111), 2);
		

        /*
		//绘制轮廓的最小外结圆  
		Point2f center; float radius;
		minEnclosingCircle(contours[i], center, radius);
		circle(画布1, center, radius, Scalar(255), 2);
        */

	
	//imshow("最小外接矩形", 画布);
	imshow("标注出矩形", 原图);
	waitKey(0);
	return 0;




以上是关于OpenCV找出最小外接矩形的主要内容,如果未能解决你的问题,请参考以下文章

我想要在opencv中用最小矩形外接图中图像并剪切截取出这个矩形部分。

Opencv 最小外接矩形合并拼接

opencv学习之路(26)轮廓查找与绘制——最小外接矩形

opencv学习之路(25)轮廓查找与绘制——正外接矩形

OpenCV求最小外接圆最小外接矩形椭圆拟合直线拟合

OpenCV中的四边形运算(一)——最小外接矩形