本文主要是介绍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找出最小外接矩形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!