m0_58447185 2023-03-16 10:19 采纳率: 41.7%
浏览 19

L模式图像、一通道数据扩充

想要扩充一通道图像数据集,但没报错,没扩充,代码如下


# -*- 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')



  • 写回答

2条回答 默认 最新

  • manylinux 2023-03-16 10:38
    关注

    以下是一个简单的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()
    

    在上面的代码中,我们首先读取了一张灰度图像,并创建了一个大小是原图两倍的全黑图像。然后遍历原图像的每个像素,将其值分别赋给扩充后的图像的四个像素中,即将原图像每个像素的值在横向和纵向上进行扩充。最后,我们在窗口中显示原图和扩充后的图像。

    需要注意的是,上述代码仅适用于灰度图像的扩充。如果要对彩色图像进行扩充,需要对每个通道分别进行扩充。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月16日

悬赏问题

  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题