数据增强——python opencv 找出图像中的最大轮廓并填充(生成mask)——python 轮廓内部填充
Posted 翟羽嚄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据增强——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)
以上是关于数据增强——python opencv 找出图像中的最大轮廓并填充(生成mask)——python 轮廓内部填充的主要内容,如果未能解决你的问题,请参考以下文章
python使用openCV图像加载(转化为灰度图像)使用equalizeHist算法增强灰度图像对比度可视化对比度增强之后的图像
OpenCV 完整例程50. 图像增强—直方图统计量图像增强
python使用OpenCV加载彩色图像并把图像转化为YUV格式的彩色图使用equalizeHist算法增强彩色图像的对比度可视化对比度增强之后的彩色图像