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)
以上是 Python_code_使用OpenCV库对图片实现数据增强 的全部内容, 来源链接: utcz.com/z/387109.html