結構分析與形狀識別(外接矩形 旋轉角度)

2021-08-06 05:44:53 字數 1694 閱讀 8844

class cv_exports rotatedrect  

;rotatedrect::points(point2f pt) const  

#include"iostream"  

#include"opencv2/opencv.hpp"  

using namespace std;  

using namespace cv;  

int main()  

rotatedrect是乙個

儲存旋轉矩形的類,通常用來

儲存最小外包矩形函式minarearect( )和橢圓擬合函式fitellipse( )返回的結果。

儲存的值,完全取決在於函式的返回

之前用到opencv最小外接矩形去表示乙個類橢圓形的高度,特此記錄備查。

對給定的 2d 點集,尋找最小面積的包圍矩形,使用函式:

cvbox2d  cvminarearect2( const cvarr* points, cvmemstorage* storage=null );

points

點序列或點集陣列

storage

可選的臨時儲存倉

函式 cvminarearect2 通過建立凸外形並且旋轉外形以尋找給定 2d 點集的最小面積的包圍矩形。

其中返回的2d盒子定義如下:

1 typedef struct cvbox2d

2 cvbox2d;

注意夾角 angle 是水平軸逆時針旋轉,與碰到的第乙個邊(不管是高還是寬)的夾角。如下圖

可用函式 cvboxpoints(box[count], point); 尋找盒子的頂點

1  void cvboxpoints( cvbox2d box, cvpoint2d32f pt[4] )

簡單證明此函式的計算公式:

計算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  void drawbox(cvbox2d box,iplimage* img)

10     cvboxpoints(box, point); //計算二維盒子頂點

11     cvpoint pt[4];

12     for ( i=0; i<4; i++)

13    

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 );

OpenCV中幾何形狀識別與測量

最近使用opencv3.3.0構建了乙個識別圖形的c c 專案,可以識別的圖形如下 三角形 正方形 長方形 菱形 圓形 五邊形 六邊形 五角星以及由不同顏色的兩個三角形構成的特殊矩形。中值濾波法是一種非線性平滑技術,它將每一畫素點的灰度值設定為該點某鄰域視窗內的所有畫素點灰度值的中值.中值濾波是基於...

MVC結構分析與設計

mvc模型 mvc是一種設計模式,它強制的將應用程式的輸入 處理 和輸出分開。使用了mvc的應用程式被分為3個核心部件 檢視 view 模型 model 控制器 controller 它們各司其職,既分工明確又相互合作。原理 首先檢視接受使用者輸入請求,然後將請求傳遞給控制器,控制器再呼叫某個模型來...

五筆結構與識別碼

4.末筆字型識別碼表 末筆筆畫只有五種,字型資訊只有三類,因此末筆字型交叉識別碼只有15種如表4 1所示。表4 1 末筆字型識別碼表 左右型1 上下型2 雜合型3 橫111 g 一 12 f二 13 d三 豎2 21 h 丨 22 j 刂 23 k 川 撇3 31 t 丿 32 r 手 33 e 彡...