CCL 連通區域提取

2022-05-18 11:33:45 字數 2917 閱讀 3031

根據朋友給的乙份原理寫的 感覺還挺清楚

#include "

cv.h

"#include

"highgui.h

"#include

using

namespace

cv;#define maxwidth 352

#define maxheight 288typedef

struct

ptnodeptnode;

void getccl(mat &imgsrc, mat &imgdst)

else

//前景

while(nodetmp2.parent != -1

)

if(nodetmp2.data > nodetmp1.data) //

小的序號做parent 大序號做child

else

if(nodetmp2.data }}

else

if(imgsrc.at(row, col) == imgsrc.at(row - 1, col)) //

僅與上面相同 序號等於上面

else

//與兩個方向的序號都不同 新建乙個序號 序號與位置相同

}else

if(row == 0 && col != 0) //

橫向邊界

else

}else

if(col == 0 && row != 0) //

豎向邊界

else

}else

//開始的(0 ,0)點 直接新建}}

}//file * out = fopen("d:\\dst.txt", "w");

//for(row = 0; row < imgsrc.rows; row++)

//

//fprintf(out, "\n");

//}//把森林中每乙個顆樹都標成統一的顏色

for(row = 0; row < imgsrc.rows; row++)

imgdst.at

(row, col) = nodetmp.data * 52 % 255; //

隨意設個顏色顯示

} }

}void

main()

效果:

字母檢測的很凌亂 

但是單獨把乙個字母拿出來 放大再檢測就ok

找到上面多字母問題的原因了。問題出在下面一句:

imgdst.at(row, col) =nodenum;

這裡nodenum是可能超過255的 但是在傳給imgdst時被強制轉換成了uchar型,導致後面的結果出錯。

用tmp.create(imgsrc.rows, imgsrc.cols, cv_32f);來修改錯誤。

修改後的**如下:

#include "

cv.h

"#include

"highgui.h

"#include

using

namespace

cv;#define maxwidth 352

#define maxheight 288typedef

struct

ptnodeptnode;

void getccl(mat &imgsrc, mat &imgdst)

else

//前景

while(nodetmp2.parent != -1

)

if(nodetmp2.data > nodetmp1.data) //

小的序號做parent 大序號做child

else

if(nodetmp2.data }}

else

if(imgsrc.at(row, col) == imgsrc.at(row - 1, col)) //

僅與上面相同 序號等於上面

else

//與兩個方向的序號都不同 新建乙個序號 序號與位置相同

}else

if(row == 0 && col != 0) //

橫向邊界

else

}else

if(col == 0 && row != 0) //

豎向邊界

else

}else

//開始的(0 ,0)點 直接新建}}

}//file * out = fopen("d:\\dst.txt", "w");

//for(row = 0; row < imgsrc.rows; row++)

//

//fprintf(out, "\n");

//}//把森林中每乙個顆樹都標成統一的顏色

for(row = 0; row < imgsrc.rows; row++)

imgdst.at

(row, col) = nodetmp.data * 51 % 255; //

隨意設個顏色顯示

修正後結果就好了。有幾個字母看起來像是丟了,其實是因為我隨機選顏色,可能導致用黑色填充。

python連通區域計算長度 連通區域演算法小結

聯通區域標記 connected component labeling 是影象處理裡面常用的乙個技術,它是用來檢測二值影象中聯通的區域,在許多跟蹤檢測演算法中充當目標區域檢測的作用。常見的ccl connected component labeling 包括two pass的方法和one pass的...

眼睛區域提取研究

能夠檢測人眼睜開或者閉合的檢測器如下 haarcascade mcs lefteye.xml and haarcascade mcs righteye.xml haarcascade lefteye 2splits.xml and haarcascade righteye 2splits.xml 只...

判斷有幾塊連通區域

隨筆寫的,感覺用得到 首先是輸入乙個陣列 由1和0組成 最後求四連通區域有幾個 如 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 有三個連通區域 思路如下 採用遞迴思想 一開始我是這麼想的,按行遍歷,若遇到乙個數字為1,那麼先看下面的是不是1,然後再看上面的,左面的,右面的,遞迴操...