對遮罩層進行輪廓檢索並合併到圖像上 第一步使用高斯模糊 GaussianBlur 模糊邊緣像素 第二步使用 Canny 偵測邊界,丟棄部分散點 最後使用 findContours 找到外框
#對遮罩層進行輪廓檢索並合併到圖像上
def drawMaskContoursOverImage(image,mask):
# convert colorspace
gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
#image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
# 3\*3 GaussianBlur
# gray = cv2.GaussianBlur(gray, (3, 3), 0)
# canny detect edge
gray = cv2.Canny(gray, 100, 300)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH\_BINARY)
# binary是最後返回的二值圖像
#findContours()第一個參數是源圖像、第二個參數是輪廓檢索模式,第三個參數是輪廓逼近方法
#輸出是輪廓和層次結構,輪廓是圖像中所有輪廓的python列表,每個單獨的輪廓是物件邊界點的(x,y)坐標的Numpy數組
binary, contours, hierarchy = cv2.findContours(thresh, cv2.RETR\_TREE, cv2.CHAIN\_APPROX\_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 1)
# 寫圖像
cv2.imwrite('%s.masked.png'%pair\[0\],image,\[int(cv2.IMWRITE\_PNG\_COMPRESSION),3\])