連通域的輪廓點集¶
概要¶
以小公主的圖片為例子,給你講解contour輪廓的含義
keywords contours 輪廓 點集
連通域的輪廓點集(contours)¶
首先讀入灰度圖.
import numpy as np import cv2 gray = cv2.imread('cute_princess.png', cv2.IMREAD_GRAYSCALE)
這幅畫是阿凱手繪的, 取名為可愛的小公主.
接下來呢, 我們利用cv2.findContours
來尋找二值化圖像的輪廓.
如果不是二值化圖片而是灰度圖的話, opencv會這樣處理:
-
0
如果灰度圖該點像素點為0 -
1
如果是除零以外的其他值
# 獲取邊緣信息 image, contours, hierarchy = cv2.findContours(image=gray,mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)
1.參數解析¶
-
image
傳入的圖片 -
mode
模式選擇,檢測外輪廓還是內輪廓,是否包含繼承(包含)關系等.
關于模式的問題,比較復雜下文還會細講.
-
cv2.RETR_EXTERNAL
只檢測外輪廓。忽略輪廓內部的洞。 -
cv2.RETR_LIST
: 檢測所有的輪廓但不建立繼承(包含)關系. -
cv2.RETR_TREE
檢測所有輪廓,并且建立所有的繼承(包含)關系。 -
cv2.RETR_CCOMP
檢測所有輪廓,但是僅僅建立兩層包含關系。 -
method
邊緣記錄方法 -
cv2.CHAIN_APPROX_NONE
記錄邊緣所有的點. -
cv2.CHAIN_APPROX_SIMPLE
僅記錄必要的點, 去除所有冗余點. 可以降低內存消耗.
下面這個圖是官網的例子.
左邊是采用CHAIN_APPROX_NONE
方法檢測到的輪廓點集, 一共734個點.
右邊是采用CHAIN_APPROX_SIMPLE
方法檢測到的輪廓點集, 一共4個點.
?
2 返回參數¶
image, contours, hierarchy
2.1 image
灰度圖的二值化圖像¶
如果傳入的就是二值化的圖像則二者值相同.
2.2 contours
輪廓點集數組¶
注意: 該contours樣例講解
是在
mode=cv2.RETR_TREE
與method=cv2.CHAIN_APPROX_SIMPLE
條件下獲取的.
[cnt0, cnt1, ...., cntn]
contour樣例
二號點集(cnt2)是一個矩形比較簡單, 所以我們可以打印出來看一下.
print(contours[2])
[[[330 283]] [[330 327]] [[526 327]] [[526 283]]]