想要扩充一通道图像数据集,但没报错,没扩充,代码如下
# -*- coding: utf-8 -*-
# 载入包
from keras.preprocessing.image import ImageDataGenerator
import os
import time
# 定义扩充图片函数
from keras.utils import load_img, img_to_array
def image_expansion(filepath,savefilepath,multiples=20):
"""
:param filepath: 图片路径
:param savefilepath: 扩充保存图片路径
:param multiples: 扩充倍数,默认扩充20倍
:return: 返回扩充后数据集
"""
# keras中可以通过keras.preprocessing.image.ImageDataGenerator类来实现
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest')
for parent, dirnames, filenames in os.walk(filepath):
for filename in filenames:
image_path=filepath+filename
print(image_path)
img = load_img(image_path)
x = img_to_array(img)
x = x.reshape((1,) + x.shape)
i = 1
for batch in datagen.flow(x, batch_size=1,
save_to_dir=savefilepath,
save_prefix='r',
save_format='jpg'):
print('正在扩充图片数据集第'+str(i)+'张')
i += 1
if i >multiples:
break
if __name__ == '__main__':
# 设置图片路径
filepath = 'C:/Users/ASUS/Dektop/R/benign/'
# 设置扩充保存图片路径
savefilepath = 'C:/Users/ASUS/Desktop/R/r-benign/'
time1 = time.time()
image_expansion(filepath,savefilepath,multiples=5)
time2=time.time()
print('总共耗时:' + str(time2 - time1) + 's')
以下是一个简单的Python示例代码,用于将单通道灰度图像进行扩充:
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# 图像扩充
img2 = np.zeros((img.shape[0]*2, img.shape[1]*2), dtype=np.uint8)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
img2[i*2][j*2] = img[i][j]
img2[i*2][j*2+1] = img[i][j]
img2[i*2+1][j*2] = img[i][j]
img2[i*2+1][j*2+1] = img[i][j]
# 显示原图和扩充后的图像
cv2.imshow('Original', img)
cv2.imshow('Expanded', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
在上面的代码中,我们首先读取了一张灰度图像,并创建了一个大小是原图两倍的全黑图像。然后遍历原图像的每个像素,将其值分别赋给扩充后的图像的四个像素中,即将原图像每个像素的值在横向和纵向上进行扩充。最后,我们在窗口中显示原图和扩充后的图像。
需要注意的是,上述代码仅适用于灰度图像的扩充。如果要对彩色图像进行扩充,需要对每个通道分别进行扩充。
参考GPT和自己的思路:
根据你的代码和问题描述,可能的原因是在生成数据时,传入的参数 batch_size
设置为了 1,这会导致每次生成只输出一张图片,而不是批量输出。因此,程序并没有产生错误,但也没有成功地将数据集扩充。你可以尝试将 batch_size
设置为一个更大的数值,例如 32 或 64,以批量生成图片数据,从而成功扩充数据集。