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.修改了...