python opencv 找出影像中的最大輪廓并填充(生成mask)——python 輪廓內部填充
- 原圖
- 效果圖
- 代碼
原圖

效果圖

代碼
import cv2
import numpy as np
img = cv2.imread('test/red_che_0.jpg')
mask = img.copy()
# 二值化,100為閾值,小于100的變為255,大于100的變為0
# 也可以根據自己的要求,改變引數:
# cv2.THRESH_BINARY
# cv2.THRESH_BINARY_INV
# cv2.THRESH_TRUNC
# cv2.THRESH_TOZERO_INV
# cv2.THRESH_TOZERO
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
etVal, threshold = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY)
# OpenCV定義的結構元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 腐蝕影像
eroded = cv2.erode(threshold, kernel)
# 膨脹影像
dilated = cv2.dilate(eroded, kernel)
# 高斯濾波
Gaussian = cv2.GaussianBlur(dilated, (5, 5), 0)
# 尋找輪廓
contours, hierarchy = cv2.findContours(Gaussian, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
valid = len(contours) > 0
# 找到所有的輪廓
#contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
area = []
# 找到最大的輪廓
for k in range(len(contours)):
area.append(cv2.contourArea(contours[k]))
max_idx = np.argmax(np.array(area))
# 填充最大的輪廓
mask = cv2.drawContours(mask, contours, max_idx, 0, cv2.FILLED)
# 保存填充后的影像
cv2.namedWindow("mask",0)
cv2.imshow("mask", mask)
cv2.waitKey(200)
cv2.waitKey(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290532.html
標籤:其他
上一篇:超級有用:針對python初學者,并根據最近做的機器人專案,淺談機器視覺模型在實際專案的思路和框架(ancacode,tensrflow-gpu,opencv-dnn,andriod)
下一篇:在VS2019安裝OpenCV庫
