对图片进行膨胀与腐蚀

操作前的图片:

 

 

操作后:

 代码实现:

import cv2
import numpy as np
from PIL import Image
import os
import matplotlib.pyplot as plt

# 生成文件夹
def makedir(path):
    folder = os.path.exists(path)

    if not folder:
        os.makedirs(path)
        print("...New folder...")
    else:
        print("...There is this folder!")

# 使用plt显示Image格式的图片
def plt_show_Image_image(image_show):
    plt.figure()
    plt.imshow(image_show)
    plt.show()

def dilate_demo(d_image):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (6, 6))  # 定义结构元素的形状和大小
    # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))  # 椭圆形
    # kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (6, 6))  # 十字形
    image = cv2.dilate(d_image, kernel)  # 膨胀操作
    # plt_show_Image_image(image)
    return image

def erode_demo(e_image):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (6, 6))  # 定义结构元素的形状和大小  矩形
    # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))  # 椭圆形
    # kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (6, 6))  # 十字形
    image = cv2.erode(e_image, kernel)  # 腐蚀操作
    # plt_show_Image_image(image)
    return image
    # 腐蚀主要就是调用cv2.erode(img,kernel,iterations),这个函数的参数是
    # 第一个参数:img指需要腐蚀的图
    # 第二个参数:kernel指腐蚀操作的内核,默认是一个简单的3X3矩阵,我们也可以利用getStructuringElement()函数指明它的形状
    # 第三个参数:iterations指的是腐蚀次数,省略是默认为1


for i in range(0, 3):
    # 图片存放的根目录
    root_path = "C:\\FeigeDownload\\humanparsing\\"
    # 同一个文件多次膨胀腐蚀
    # 读取文件夹图片
    a = str(i)
    image_root = os.path.join(root_path, 'SegmantationClassDilateErode' + a)

    # 图片列表
    imagename_list = os.listdir(image_root)  # '2500_1.jpg'

    # 创建文件夹,作为存放图片的地方
    b = str(i + 1)
    new_image_root = os.path.join(root_path, 'SegmantationClassDilateErode' + b)
    makedir(new_image_root)
    # 保存图片
    save_root = new_image_root

    for m in imagename_list:
        path = os.path.join(image_root, m)
        img = cv2.imread(path)
        # plt_show_Image_image(img)

        # 对图片进行膨胀
        mask_dil = dilate_demo(img)

        # 对图片进行腐蚀
        mask_dil_ero = erode_demo(mask_dil)

        # 保存图片
        save_path = os.path.join(save_root, m)
        cv2.imwrite(save_path, mask_dil_ero)
        # plt_show_Image_image(mask_dil_ero)



PS:有个bug,重复操作几次后的结果与初始时差不多???


版权声明:本文为qq_36998053原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。