Opencv繪制最小外接矩形、最小外接圓
Opencv中求點集的最小外結(jié)矩使用方法minAreaRect,求點集的最小外接圓使用方法minEnclosingCircle。
minAreaRect方法原型:
RotatedRect minAreaRect( InputArray points );
輸入?yún)?shù)points是所要求最小外結(jié)矩的點集數(shù)組或向量;
minEnclosingCircle方法原型:
void minEnclosingCircle( InputArray points, CV_OUT Point2f& center, CV_OUT float& radius );
第一個參數(shù)points是所要求最小外結(jié)圓的點集數(shù)組或向量;
第二個參數(shù)Point2f類型的center是求得的最小外接圓的中心坐標;
第三個參數(shù)float類型的radius是求得的最小外接圓的半徑;
使用minAreaRect和minEnclosingCircle方法分別求最小外接矩和圓:
#include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/imgproc.hpp" #include "iostream" using namespace std; using namespace cv; int main(int argc,char *argv[]) { Mat imageSource=imread(argv[1],0); imshow("Source Image",imageSource); Mat image; blur(imageSource,image,Size(3,3)); threshold(image,image,0,255,CV_THRESH_OTSU); imshow("Threshold Image",image); //尋找最外層輪廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(image,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_NONE,Point()); Mat imageContours=Mat::zeros(image.size(),CV_8UC1); //最小外接矩形畫布 Mat imageContours1=Mat::zeros(image.size(),CV_8UC1); //最小外結(jié)圓畫布 for(int i=0;i<contours.size();i++) { //繪制輪廓 drawContours(imageContours,contours,i,Scalar(255),1,8,hierarchy); drawContours(imageContours1,contours,i,Scalar(255),1,8,hierarchy); //繪制輪廓的最小外結(jié)矩形 RotatedRect rect=minAreaRect(contours[i]); Point2f P[4]; rect.points(P); for(int j=0;j<=3;j++) { line(imageContours,P[j],P[(j+1)%4],Scalar(255),2); } //繪制輪廓的最小外結(jié)圓 Point2f center; float radius; minEnclosingCircle(contours[i],center,radius); circle(imageContours1,center,radius,Scalar(255),2); } imshow("MinAreaRect",imageContours); imshow("MinAreaCircle",imageContours1); waitKey(0); return 0;
作圖步驟:
1. 對原始圖像均值濾波并二值化;
2. 求圖像的最外層輪廓;
3. 使用minAreaRect方法求輪廓的最小外接矩形,轉(zhuǎn)化求得矩形的四個頂點坐標,并繪制矩形;
4. 使用minEnclosingCircle方法求輪廓的最小外接圓,獲取圓心和半徑信息,并繪制圓;
原始圖像:
最小外接矩:
最小外接圓:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。
欄 目:C語言
下一篇:c++語言中虛函數(shù)實現(xiàn)多態(tài)的原理詳解
本文標題:Opencv繪制最小外接矩形、最小外接圓
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/293.html
您可能感興趣的文章
- 01-10最小生成樹算法C語言代碼實例
- 01-10實現(xiàn)opencv圖像裁剪分屏顯示示例
- 01-10使用opencv拉伸圖像擴大分辨率示例
- 01-10MFC繪制不規(guī)則窗體的方法
- 01-10最小生成樹算法之Prim算法
- 01-10詳解圖的應用(最小生成樹、拓撲排序、關(guān)鍵路徑、最短路徑)
- 01-10使用C語言實現(xiàn)最小生成樹求解的簡單方法
- 01-10基于C++實現(xiàn)kinect+opencv 獲取深度及彩色數(shù)據(jù)
- 01-10使用C++繪制GDI位圖的基本編寫實例
- 01-10詳解C語言求兩個數(shù)的最大公約數(shù)及最小公倍數(shù)的方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11ajax實現(xiàn)頁面的局部加載