C OpenCV 0 外接輪廓檢測

2022-06-26 20:15:09 字數 2199 閱讀 1442

1.資料來源為8通道灰度影象

2.外接矩形、邊緣輪廓、中心點    

3.周長、面積(幾何積分值)

4.最大、最小外接矩形

5.外接圓,外接橢圓

1.資料來源為8通道灰度影象

//轉換成8通道

cvtcolor(image, imagegray, color_bgr2gray);

2.外接矩形、邊緣輪廓、中心點

//mode:輪廓提取方式:retr_external提取最外層,retr_tree 表示出其層次

//在哪繪製輪廓 -1 表示繪製所有的輪廓 繪製的顏色,線寬是2,如果為-1 就是填充;繪製的圖色是8領域的

drawcontours(imagecopy, contours, -1, scalar(0, 0, 255), 2, 8);

3.周長、面積(幾何積分值)、中心點

/*contours存的是點陣

面積 contourarea

周長 arclength

中心點*/

for (int i = 0; i < contours.size(); i++)

4.最大、最小外接矩形

最大外接矩形點陣:boundingrect(),rectangle()

最小外接矩形點陣:minarearect(),polylines()

//最大外接矩形

rect box = boundingrect(contours[i]);

rectangle(imagecopy, box, scalar(0, 255, 0), 2, 8, 0);

//最小外接矩形

imagecopy = image.clone();

rotatedrect rotrect;

point2f rect_points[4];

mat boxpoints2f, boxpointscov;

for (size_t i = 0; i < contours.size(); i++)

imshow("minrectangle", imagecopy);

5.外接圓(點陣,圓心,半徑),外接橢圓

獲取點陣:minenclosingcircle() ;畫圓:circle()

獲取點陣:fitellipse();畫圓:ellipse()

//外接圓 圓心,半徑

imagecopy = image.clone();

point2f center;

float radius;

for (size_t i = 0; i < contours.size(); i++)

imshow("外接圓", imagecopy);

waitkey(0);

//外接橢圓

imagecopy = image.clone();

rotatedrect rellipse;

for (size_t i = 0; i < contours.size(); i++)

imshow("外接橢圓", image);

c opencv 矩陣掩膜

第一行 cols明顯是int變數,src是mat變數 在前面宣告 因為mat結構體變數名,所以src.cols 1是獲取列數 總列數減一,因為最後一列 最開始一列 最後一行和最開始一行不用,所以去掉 src.channels 也是乙個結構體裡的方法,獲取的通道數,因為畫素的通道數隻與列有關所以相乘獲...

c opencv 畫素操作 老太君

opencv對畫素的操作有兩種,一種是先獲取某行的指標,在確定需要操作的畫素。如 mat src imread 導一張 const uchar ptr src.ptr row 定義乙個uchar指標存放該第row行畫素的指標 確定畫素也就簡單了,因為畫素是陣列一樣排列的,如要訪問第乙個畫素ptr 另...

c opencv中線條細化演算法

要達到的效果就是將線條盡量細化成單畫素,按照 上的hilditch演算法試了一下,發現效果不好,於是自己嘗試著寫了一下細化的演算法,基本原理就是從上下左右四個方向向內收縮。1.先是根據中的原則確定了以下16種情況 2.除錯過後發現,迭代次數多了之後,原來連線著的線條會斷開,分析原因如下圖 3.修改了...