1:輪廓檢測的基本流程
圖像灰度化→圖像二值化或邊緣檢測→輪廓檢測
2:輪廓特徵
輪廓矩,面積,周長等
3:輪廓近似、凸包
輪廓近似:設置精度,對原輪廓進行多邊形近似。
凸包:相當於獲取外交多邊形。
4:外接矩形
這裡有兩種,常規外接矩形 和 最小外接矩形(有旋轉角度)。
5:最小外接圓
6:擬合橢圓
7:輪廓的常用屬性
https://docs.opencv.org/4.4.0/d1/d32/tutorial_py_contour_properties.html
8:判斷點與輪廓的位置關係
dist = cv.pointPolygonTest(cnt,(50,50),True)
第三個參數是True則返回的是點到輪廓的距離,負數表示點在輪廓外,正數表示點在輪廓內,0表示點在輪廓上;False則表示點是否在輪廓內外或上。
9:輪廓匹配
dis= cv.matchShapes(cnt1,cnt2,1,0.0)
基於hu矩計算兩個輪廓的距離,越小越相似。
10:輪廓提取方式
cv2.RETR_EXTERNAL - 只提取最外層的輪廓
cv2.RETR_LIST - 提取所有輪廓,並且放置在 list 中
cv2.RETR_CCOMP - 提取所有輪廓,並且將其組織為兩層的 hierarchy: 頂層為連通域的外圍邊界,次層為洞的內層邊界。
cv2.RETR_TREE - 提取所有輪廓,並且重構嵌套輪廓的全部 hierarchy
11:輪廓點存儲方式
cv2.CHAIN_CODE - Freeman 鏈碼的輸出輪廓. 其它方法輸出多邊形(定點序列).
cv2.CHAIN_APPROX_NONE - 將所有點由鏈碼形式翻譯(轉化)為點序列形式
cv2.CHAIN_APPROX_SIMPLE - 壓縮水平、垂直和對角分割,即函數隻保留末端的像素點;
cv2.CHAIN_APPROX_TC89_L1,
cv2.CHAIN_APPROX_TC89_KCOS - 應用 Teh-Chin 鏈逼近算法. CV_LINK_RUNS - 通過連接為 1 的水平碎片使用完全不同的輪廓提取算法。僅有 CV_RETR_LIST 提取模式可以在本方法中應用.