1. 程式人生 > >【Opencv】繪製最小外接矩形、最小外接圓

【Opencv】繪製最小外接矩形、最小外接圓

Opencv繪製最小外接矩形、最小外接圓

Opencv中求點集的最小外結矩使用方法minAreaRect,求點集的最小外接圓使用方法minEnclosingCircle。

minAreaRect方法原型:

RotatedRect minAreaRect( InputArray points );  

輸入引數points是所要求最小外結矩的點集陣列或向量;

minEnclosingCircle方法原型:

void minEnclosingCircle( InputArray points,  
                                      CV_OUT Point2f& center, CV_OUT float& radius );  

第一個引數points是所要求最小外結圓的點集陣列或向量;

第二個引數Point2f型別的center是求得的最小外接圓的中心座標;

第三個引數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); //最小外結圓畫布  
    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);  
  
  
        //繪製輪廓的最小外結矩形  
        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);  
        }  
  
        //繪製輪廓的最小外結圓  
        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方法求輪廓的最小外接矩形,轉化求得矩形的四個頂點座標,並繪製矩形;

4.  使用minEnclosingCircle方法求輪廓的最小外接圓,獲取圓心和半徑資訊,並繪製圓;

原始影象:

最小外接矩:

最小外接圓:

相關推薦

Opencv繪製矩形外接圓

Opencv繪製最小外接矩形、最小外接圓 Opencv中求點集的最小外結矩使用方法minAreaRect,求點集的最小外接圓使用方法minEnclosingCircle。 minAreaRect方法原型: RotatedRect minAreaRect( Input

0035-OpenCV環境下繪製輪廓的多邊形立式矩形外接圓

OpenCV提供了函式approxPolyDP()、boundRect()、minEnclosingCircle()分別計算給定點集的外接多邊形,最小立式矩形和最小外接圓,下面分別給出這三個函式的原型和引數意義。approxPolyDP函式(計算外接多邊形): C++: void approxPol

opencv矩形2 的演算法

之前用到opencv最小外接矩形去表示一個類橢圓形的高度,特此記錄備查。 對給定的 2D 點集,尋找最小面積的包圍矩形,使用函式: CvBox2DcvMinAreaRect2(constCvArr*points,CvMemStorage*storage=NULL);

Opencv獲取矩形——minAreaRect

//!computes the minimal rotated rectangle for a set of points RotatedRect minAreaRect(InputArray points);//計算一些列點的最小外接矩形,帶角度資訊 C+

OpenCV找出矩形

慣例先放結果吧 測試圖片盜取自:  地址  (2333) 其實就一行關鍵的程式碼: RotatedRect rect = minAreaRect(contours[i]);下面就是簡單粗暴的程

BZOJ 1185: [HNOI2007]矩形覆蓋-旋轉卡殼法求點集矩形(面積)並輸出四個頂點坐標-備忘板子

article ref https color 旋轉 blank spa def abs 來源:旋轉卡殼法求點集最小外接矩形(面積)並輸出四個頂點坐標 BZOJ又崩了,直接貼一下人家的代碼。 代碼: 1 #include"stdio.h"

(五)建築物多邊形化簡系列——矩形的獲取

最小外接矩形問題是在給出一個多邊形(或一群點),求出面積最小且外接多邊形的矩形的問題。這個問題看起來並不難,但是具體實現並不簡單。除了呼叫現有的公開庫之外,這裡給出一種簡單且易理解的方法。   演算法的主要思想是: (1)先實現多邊形的簡單外接矩形的演算法。簡單外接矩形是指邊平

C/C++ 影象處理(16)------影象輪廓の矩形

有時做影象處理,會遇到影象中大部分資訊是冗餘的情況,以下圖為例: 假設圖中黑色部分才是我們需要研究的物件,則外圍的一堆白色是我們希望去掉的,這個時候用最小外接矩形來框住黑色部分,進而擷取該部分的資

矩形(ROI)

//---------------------------------【標頭檔案、名稱空間包含部分】---------------------------- // 描述:包含程式所使用的標頭檔案和名稱空間 //-------------------------------

OpenCV圖像增強---灰度變換直方圖均衡化

test 增強 映射 display 得到 .cpp scalar pic 重要 圖像增強的目的:改善圖像的視覺效果或使圖像更適合於人或機器的分析處理。通過圖像增強,可以減少圖像噪聲,提高目標與背景的對比度,也可以增強或抑制圖像中的某些細節。 -------------

26opencv入門輪廓查找與繪制(4)——正矩形

waitkey font 定義 truct 形狀 esp 圖片 namespace open 一、簡介 1、使用特定形狀的輪廓包圍   在實際應用中, 經常會有將檢測到的輪廓用多邊形表示出來的需求, 提取包圍輪廓的多邊形也方便我們做進一步分析, 輪廓包圍主要有一下幾種: 輪

opencv矩陣

求最小外接矩陣的基本原理: 獲取點簇最開始的minx,maxx,miny,maxy確定最初的外接矩形,求外接矩形的面積,然後對點簇進行旋轉,按照下面公式即可: 旋轉之後,求出新的minx,maxx,miny,maxy,計算此時的面積,直到面積達到最小,對應的即為最小外接矩形。 關於

Opencv 輪廓 逼近多邊形曲線 正矩形 矩形

環境 win7 + vs2015 + Opencv2.4.13 對影象輪廓點進行多邊形擬合 void approxPolyDP( InputArray curve,                                 OutputArray appro

opencv 顯示面積的矩形,並求該矩形的長和寬以及四個角的位置

#include "cv.h" #include "highgui.h" #include <stdio.h> #include <math.h> int main(int argc,char** argv) {  IplImage *src,*gr

MT61含參數二次函數

tco pla 最大 back inline 我們 最小 但是 alt 評:此類題目在高考中作為壓軸題也曾考過,一般通性通法都如上面的做法,但是我們如果可以站在包絡的角度,很多問題將變得很清晰:MT【61】含參數二次函數最大最小值

重磅App內可直接打開微信程序,新增內容安全口等

獲得 指定 targe 吐槽 第三方服務 除了 圖片 開發 提前 今晚,微信又公布了幾項微信小程序新能力: 微信小程序上線App直接打開小程序功能 內容安全接口、插件詳情頁等多種能力接連更新上線 一、App直接打開小程序之前微信已經開放過相關能力,可以實

OpenCV一些常用類彙總 (size等)

Backto OpenCV Index size OpenCV 中 size 直接給定數值的建構函式是 Size(double width, double height) 竟然不是和 Mat 一致的 (height, width), 簡直匪夷所思.

LeetCode154. 尋找旋轉排序陣列中的值 II 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/description/ 題目描述: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,

LeetCode153. 尋找旋轉排序陣列中的值 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/description/ 題目描述: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,6,7

opencvc++繪製文字

  cv::putText(img,std::to_string(i),p,0,2,cv::Scalar(0,0,255)); // 0為字型,2為字號 void cv::putText( cv::Mat& img, // 待繪製的影象