OpenCV找出最小外接矩形
阿新 • • 發佈:2019-01-24
慣例先放結果吧
測試圖片盜取自: 地址 (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; }