opencv中最小外接矩形2 的演算法
之前用到opencv最小外接矩形去表示一個類橢圓形的高度,特此記錄備查。
對給定的 2D 點集,尋找最小面積的包圍矩形,使用函式:
CvBox2DcvMinAreaRect2(constCvArr*points,CvMemStorage*storage=NULL);- points
其中返回的2D盒子定義如下:
1 typedefstructCvBox2D2 {
3 CvPoint2D32fcenter;/*盒子的中心
4 CvSize2D32fsize;/*盒子的長和寬*/
5 floatangle;/*水平軸與第一個邊的夾角,用弧度表示*/
6 }CvBox2D;
注意夾角 angle 是水平軸逆時針旋轉,與碰到的第一個邊(不管是高還是寬)的夾角。如下圖
可用函式 cvBoxPoints(box[count], point); 尋找盒子的頂點
1 voidcvBoxPoints(CvBox2Dbox,CvPoint2D32fpt[4])2 {
3 doubleangle=box.angle*CV_PI/180.
4 float
5 floatb=(float)sin(angle)*0.5f;
6
7 pt[0].x=box.center.x-a*box.size.height-b*box.size.width;
8 pt[0].y=box.center.y+b*box.size.height-a*box.size.width;
9 pt[1].x=box.center.x+a*box.size.height-b*box.size.width;
10 pt[1].y=box.center.y-b*box.size.height-a*box.size.width;
11
12 pt[2].y=2*box.center.y-pt[0].y;
13 pt[3].x=2*box.center.x-pt[1].x;
14 pt[3].y=2*box.center.y-pt[1].y;
15 }
簡單證明此函式的計算公式: 計算x,由圖可得到三個方程式: pt[1].x-pt[0].x=width*sin(angle)
pt[2].x-pt[1].x=height*cos(angle)
pt[2].x-pt[0].x=2(box.center.x-pt[0].x) 聯立方程可解得函式裡的計算式,算 y 略。
寫了個函式繪製CvBox2D
1 voidDrawBox(CvBox2Dbox,IplImage*img)2 {
3 CvPoint2D32fpoint[4];
4 inti;
5 for(i=0;i<4;i++)
6 {
7 point[i].x=0;
8 point[i].y=0;
9 }
10 cvBoxPoints(box,point);//計算二維盒子頂點
11 CvPointpt[4];
12 for(i=0;i<4;i++)
13 {
14 pt[i].x=(int)point[i].x;
15 pt[i].y=(int)point[i].y;
16 }
17 cvLine(img,pt[0],pt[1],CV_RGB(255,0,0),2,8,0);
18 cvLine(img,pt[1],pt[2],CV_RGB(255,0,0),2,8,0);
19 cvLine(img,pt[2],pt[3],CV_RGB(255,0,0),2,8,0);
20 cvLine(img,pt[3],pt[0],CV_RGB(255,0,0),2,8,0);
21 }
相關推薦
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】繪製最小外接矩形、最小外接圓
Opencv繪製最小外接矩形、最小外接圓 Opencv中求點集的最小外結矩使用方法minAreaRect,求點集的最小外接圓使用方法minEnclosingCircle。 minAreaRect方法原型: RotatedRect minAreaRect( Input
OpenCV找出最小外接矩形
慣例先放結果吧 測試圖片盜取自: 地址 (2333) 其實就一行關鍵的程式碼: RotatedRect rect = minAreaRect(contours[i]);下面就是簡單粗暴的程
BZOJ 1185: [HNOI2007]最小矩形覆蓋-旋轉卡殼法求點集最小外接矩形(面積)並輸出四個頂點坐標-備忘板子
article ref https color 旋轉 blank spa def abs 來源:旋轉卡殼法求點集最小外接矩形(面積)並輸出四個頂點坐標 BZOJ又崩了,直接貼一下人家的代碼。 代碼: 1 #include"stdio.h"
opencv求最小外接矩陣
求最小外接矩陣的基本原理: 獲取點簇最開始的minx,maxx,miny,maxy確定最初的外接矩形,求外接矩形的面積,然後對點簇進行旋轉,按照下面公式即可: 旋轉之後,求出新的minx,maxx,miny,maxy,計算此時的面積,直到面積達到最小,對應的即為最小外接矩形。 關於
(五)建築物多邊形化簡系列——最小外接矩形的獲取
最小外接矩形問題是在給出一個多邊形(或一群點),求出面積最小且外接多邊形的矩形的問題。這個問題看起來並不難,但是具體實現並不簡單。除了呼叫現有的公開庫之外,這裡給出一種簡單且易理解的方法。 演算法的主要思想是: (1)先實現多邊形的簡單外接矩形的演算法。簡單外接矩形是指邊平
C/C++ 影象處理(16)------影象輪廓の最小外接矩形
有時做影象處理,會遇到影象中大部分資訊是冗餘的情況,以下圖為例: 假設圖中黑色部分才是我們需要研究的物件,則外圍的一堆白色是我們希望去掉的,這個時候用最小外接矩形來框住黑色部分,進而擷取該部分的資
最小外接矩形(ROI)
//---------------------------------【標頭檔案、名稱空間包含部分】---------------------------- // 描述:包含程式所使用的標頭檔案和名稱空間 //-------------------------------
點集最小外接矩演算法
作者:馮浩 時間: 2007.10.11 文件型別/出處:NOI專刊 題目簡述: 給出一個平面點集S,求一個面積最小的矩形使其包含S所有的點。 預備知識: 在求解這道題之前我們先要了解一些關於凸包的知識。 什麼是凸包?簡單地說,對於一個
連通域的最小外接多邊形
在MATLAB中,使用roipoly來選擇一個感興趣區域(ROI),該函式將生成一個多邊形的ROI。函式的用法為:1、B=roipoly(f,c,r);其中f為要處理的影象,c和r分別是ROI的頂點對應的列座標和行座標(按順序排列)。定點座標的原點在左上角。B為一幅二值影象,
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
AreEngine 求最小面積的外接矩形,非IEnvelope,表達不清楚了
1,總是會得到一些奇奇怪怪的要求,求一個面對象的外接最小面積的矩形,和ArcToolBox中的Mininum Bounding Geometry功能下的RECTANGLE_BY_AREA想似。具體看下圖: 區別如上圖所示:IEnvelope 得到的是下圖所示,需要的是第一種 (只是記錄一
hdu 5251 矩形面積 (旋轉卡殼求最小面積外接矩形)
矩形面積 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 417 Accepted Submission
26、【opencv入門】輪廓查找與繪制(4)——正外接矩形
waitkey font 定義 truct 形狀 esp 圖片 namespace open 一、簡介 1、使用特定形狀的輪廓包圍 在實際應用中, 經常會有將檢測到的輪廓用多邊形表示出來的需求, 提取包圍輪廓的多邊形也方便我們做進一步分析, 輪廓包圍主要有一下幾種: 輪
給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值;教材2-15
給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值; 解:要求對於陣列用小於【3n/2-2】的比較次數找到兩個最值 可以用陣列第一個元素來初始化max,min 然後遍歷陣列,分別和max,min比較,一遍就可以找
OpenCV minMaxLoc找影象中最小值最大值及它們的位置
void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArray mask=noArray()) src:輸入影象。 minVal:最
在一個列表中儲存以下元素:apple,grape,banana,pear 3.1 返回集合中的最大的和最小的元素 3.2 將集合進行排序,並將排序後的結果列印在控制檯上 [必做題]
比較類 public class name implements Comparator<f>{ @Override public int compare(f o1, f o2) { return o2.getName().compareTo(o1.get
openCV實現影象的輪廓檢測以及外接矩形
前兩篇博文分別介紹了影象的邊緣檢測和輪廓檢測,本文接著介紹影象的輪廓檢測和輪廓外接矩形: 一、程式碼部分: // extract_contours.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include&