zoukankan      html  css  js  c++  java
  • Python_code_使用OpenCV库对图片实现数据增强

    Python_code_使用OpenCV库对图片实现数据增强_11种

    代码:

    #读取文件用
    import os
    import glob
    #openCV的库
    import cv2
    import cv2 as cv
    import numpy as np
    #显示图片用
    import matplotlib.pyplot as plt
    #以下两行实现了在plt画图时,可以输出中文字符
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus'] = False



    def Image_Enhancement(img_path):
    print(img_path)
    img = cv2.imread(img_path);

    #显示原图
    plt.figure(),plt.title("原图"),plt.imshow(img),plt.xticks([]),plt.yticks([]);

    #均值模糊 去随机噪声有很好的去燥效果
    im = cv.blur(img,(1,15));
    plt.figure(),plt.title("均值模糊"),plt.imshow(im),plt.xticks([]),plt.yticks([]);

    #中值模糊 对椒盐噪声有很好的去燥效果
    im = cv.medianBlur(img,5);
    plt.figure(),plt.title("中值模糊"),plt.imshow(im),plt.xticks([]),plt.yticks([]);

    #高斯模糊
    im = cv2.GaussianBlur(img, (15, 15), 0);
    plt.figure(),plt.title("高斯模糊"),plt.imshow(im),plt.xticks([]),plt.yticks([]);

    #双边滤波
    im = cv.bilateralFilter(img, 0, 100, 15);
    plt.figure(),plt.title("双边滤波"),plt.imshow(im),plt.xticks([]),plt.yticks([]);

    #均值迁移
    im = cv.pyrMeanShiftFiltering(img, 10, 50);
    plt.figure(),plt.title("均值迁移"),plt.imshow(im),plt.xticks([]),plt.yticks([]);


    #直方图正规化
    im = np.zeros(img.shape, np.uint8);
    cv.normalize(img, im, 255, 0, cv.NORM_MINMAX, cv.CV_8U);
    plt.figure(),plt.title("直方图正规化"),plt.imshow(im),plt.xticks([]),plt.yticks([]);


    #伽马变换
    #图像归一化
    fi = img/255.0
    #伽马变换
    gamma = 0.4
    im = np.power(fi,gamma)
    plt.figure(),plt.title("伽马变换后的结果"),plt.imshow(im),plt.xticks([]),plt.yticks([]);



    #canny边缘提取:对整张银行卡处理后的效果不错,但是对单个数字的处理不好
    blurred = cv.GaussianBlur(img, (3, 3), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_RGB2GRAY)
    # xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0) #x方向梯度
    # ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1) #y方向梯度
    # edge_output = cv.Canny(xgrad, ygrad, 50, 150)
    edge_output = cv.Canny(gray, 50, 150)
    plt.figure(),plt.title("Canny Edge"),plt.imshow(edge_output),plt.xticks([]),plt.yticks([]);
    dst = cv.bitwise_and(img, img, mask=edge_output)
    plt.figure(),plt.title("Color Edge"),plt.imshow(dst),plt.xticks([]),plt.yticks([]);


    #图像的平滑效果
    kernel = np.ones((5, 5), np.float32) / 25;
    im = cv2.filter2D(img, -1, kernel);
    plt.figure(),plt.title("图像的平滑效果"),plt.imshow(im),plt.xticks([]),plt.yticks([]);


    #图像的浮雕效果
    #自定义卷积核
    kernel_emboss_3 = np.array([[1, 0, 0], [0, 0, 0], [0, 0, -1]]) #这个还是可以看出结果的
    # 浮凸
    output_3 = cv2.filter2D(img, -1, kernel_emboss_3)
    #显示结果
    plt.figure(),plt.title("图像的浮雕效果3"),plt.imshow(output_3),plt.xticks([]),plt.yticks([]);     plt

    .show()



    '''主函数部分:进行函数调用'''
    #图片数据所在的根目录dataset_dir
    = '..\data'

    for root, dirs, files in os.walk(dataset_dir):
      '''
    root 所指的是当前正在遍历的这个文件夹的本身的地址
    dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
    files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    '''
      for sDir in dirs:
        # 当前文件夹下子目录的绝对路径
    imgs_list = glob.glob(os.path.join(root, sDir) + '/*.png')

        for i in imgs_list:
          if '_' in i or 'png' not in i:
    continue
          Image_Enhancement(i)
  • 相关阅读:
    小峰视频三:在eclipse中创建java类
    小峰视频二:java类的编译与解释
    小峰视频一:jdk环境变量的配置
    React/数据流
    React/组件
    React/生命周期
    React/虚拟DOM
    React/JSX简介
    12.朴素贝叶斯-垃圾邮件分类
    9、主成分分析
  • 原文地址:https://www.cnblogs.com/lyj0123/p/11245806.html
Copyright © 2011-2022 走看看