python輪廓
A. 如何用python取圖片輪廓
1、查找輪廓(find_contours)
measure模塊中的find_contours()函數,可用來檢測二值圖像的邊緣慧游輪廓。
函數原型為:
skimage.measure.find_contours(array,level)
array: 一個二值數組圖像
level: 在圖像中查找輪廓的級別值
返回輪廓列表集合,可用for循環取出每一條輪廓。
例1:
importnumpyasnp
importmatplotlib.pyplotasplt
fromskimageimportmeasure,draw
#生成二值測試圖像
img=np.zeros([100,100])
img[20:40,60:80]=1#矩形
rr,cc=draw.circle(60,60,10)#小圓
rr1,cc1=draw.circle(20,30,15)#大圓
img[rr,cc]=1
img[rr1,cc1]=1
#檢測所有圖形的輪廓
contours=measure.find_contours(img,0.5)
#繪制輪廓前陵銷
fig,(ax0,ax1)=plt.subplots(1,2,figsize=(8,8))
ax0.imshow(img,plt.cm.gray)
ax1.imshow(img,plt.cm.gray)
forn,contour汪則inenumerate(contours):
ax1.plot(contour[:,1],contour[:,0],linewidth=2)
ax1.axis('image')
ax1.set_xticks([])
ax1.set_yticks([])
plt.show()
結果如下:不同的輪廓用不同的顏色顯示
B. python 圖像處理 怎樣將輪廓內部填充
可以用反選,也可以把要填充的部分選中,選擇油漆桶工具直接填充自己想要的顏色。
C. 【Python學習蝴蝶書】第八章 輪廓8-輪廓的匹配(等級匹配)
等級匹配通過逐步削減或填充輪廓邊緣的尖角或凹陷,減少多邊形頂點的數量,形成一個每步操作的三角形作為葉節點的二分樹。最終頂點剩下4個,再被分解為兩個三角形,作為根節點的子節點,形成二分樹結構。
等級匹配過程可直觀理解為輪廓頂點的遞減過程,形成具有根節點和葉節點的二分樹。每一步的三角形代表一個葉節點,最終輪廓頂點減少至四個,形成兩個三角形作為根節點的兩個子節點。
實現等級匹配的原理圖通常顯示了此過程,包括從原始輪廓到最終二分樹的轉換。然而,這個過程的魯棒性可能不高,輪廓上微小的變化可能會導致樹結構發生顯著變化。
凸包和凸缺陷是輪廓分析中的兩個關鍵概念。凸包是指輪廓頂點形成的外角均大於180度的多邊形。凸缺陷則表示輪廓相對於凸包的偏差區域。
凸包的概念可以通過計算輪廓點集的凸包角點來實現,Python中提供cv2.convexHull函數完成此任務。該函數接收輪廓點集作為參數,並可選擇輸出凸包角點的坐標或索引,以及決定角點排列方向。
凸缺陷則通過cv2.convexityDefects函數計算,該函數需要輪廓點集、凸包點索引作為輸入,輸出每個缺陷的起始點、終止點、最遠輪廓點索引和最遠距離。
實際應用中,通過cv2.convexHull函數可以計算出輪廓的凸包,如圖中藍色多邊形所示。接著,使用cv2.convexityDefects函數獲取凸包與原始輪廓之間的凸缺陷信息。通過將起始點與終止點相連,可以得到凸包的輪廓線,同時,標記出凸缺陷中最遠點與凸包邊的距離。