opencv入門九,圖像矩, 點多邊形測試, 基於距離變換與分水嶺的圖像分割

圖像矩

moments(
InputArray  array,//輸入數據
bool   binaryImage=false // 是否爲二值圖像
)

面積

contourArea(
InputArray  contour,//輸入輪廓數據
bool   oriented// 默認false、返回絕對值)

弧長

arcLength(
InputArray  curve,//輸入曲線數據
bool   closed// 是否是封閉曲線)

過程:
提取圖像邊緣
發現輪廓
計算每個輪廓對象的矩
計算每個對象的中心、弧長、面積

點多邊形測試

測試一個點是否在給定的多邊形內部,邊緣或者外部

pointPolygonTest(
InputArray  contour,// 輸入的輪廓
Point2f  pt, // 測試點
bool  measureDist // 是否返回距離值,如果是false,1表示在內面,0表示在邊界上,-1表示在外部,true返回實際距離
返回數據是double類型)

基於距離變換與分水嶺的圖像分割

cv::distanceTransform(InputArray  src, OutputArray dst,  OutputArray  labels,  int  distanceType,  int maskSize,  int labelType=DIST_LABEL_CCOMP)
distanceType = DIST_L1/DIST_L2,
maskSize = 3x3,最新的支持5x5,推薦3x3、
labels離散維諾圖輸出
dst輸出8位或者32位的浮點數,單一通道,大小與輸入圖像一致

cv::watershed(InputArray image, InputOutputArray  markers)

流程
1.將白色背景變成黑色-目的是爲後面的變換做準備
2. 使用filter2D與拉普拉斯算子實現圖像對比度提高,sharp
3. 轉爲二值圖像通過threshold
4. 距離變換
5. 對距離變換結果進行歸一化到[0~1]之間
6. 使用閾值,再次二值化,得到標記
7. 腐蝕得到每個Peak - erode
8.發現輪廓 – findContours
9. 繪製輪廓- drawContours
10.分水嶺變換 watershed
11. 對每個分割區域着色輸出結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章