数据增强——python opencv 找出图像中的最大轮廓并填充(生成mask)——python 轮廓内部填充

Posted 翟羽嚄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据增强——python opencv 找出图像中的最大轮廓并填充(生成mask)——python 轮廓内部填充相关的知识,希望对你有一定的参考价值。

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算法增强彩色图像的对比度可视化对比度增强之后的彩色图像

Python库 - Albumentations 图片数据增强库

Python 计算机视觉—— OpenCV 进行图像增强

OpenCV 完整例程67. 空间域图像增强的综合应用