批量处理文件

前言

最近在做图像的数据集时,经常要对批量文件进行处理。因为代码不熟练,每次都要查,就很烦,这次直接把数据集做好了,但以后也可能重做啊,谁知道这鬼数据会不会影响结果。苦逼!这会趁着跑实验的时间,记录一下常用操作,方便翻阅。

查看图片通道数

注意不是所有图片都是3通道的,png图像有3有4,4通道的图多了一个透明度。

遍历文件夹

path = '你的文件路径'
all_image = os.listdir(path)# 返回当前路径下的文件及文件夹列表
# print(all_image)

for i in all_image:
    img_path = os.path.join(path,i)# 遍历到了所有文件

文件路径分割

import os
file_path = "D:/test/test.py"
(filepath,tempfilename) = os.path.split(file_path)
(filename,extension) = os.path.splitext(tempfilename)

filepath为文件的目录,即D:/test

filename为文件的名字,即test

extension为文件的扩展名,即.py
参考:python分割文件目录/文件名和后缀

文件重命名

os.rename(img_path,dst_path)

图片格式转换

在imread进来图片后可以直接通过cv2.imwrite保存png格式图片,完成转换。

cv2.imwrite('./_png/'+n+'.png',img)

综合

import cv2
import os

path = '读取路径'
save_path = '保存路径'
all_image = os.listdir(path)# 返回当前路径下的文件及文件夹列表
print(all_image)

for i in all_image:
    img_path = os.path.join(path,i)
    img = cv2.imread(img_path)
    # 图像使用双三次插值缩小3倍
    a = int(img.shape[0]/3)
    b = int(img.shape[1]/3)
    #print (a,b)
    (filename,extension) = os.path.splitext(i)
    img2 = cv2.resize(img,(b,a),interpolation=cv2.INTER_CUBIC)
    # print (save_path+'/'+filename)
    cv2.imwrite(save_path+'/'+filename+'x3'+extension,img2)
print('finished convert')

PSNR和SSIM计算公式

自己写的公式,如果sr图像和原图不一样大时(跑EDSR时出现了这个问题),有双三次插值对sr进行矫正。可能和正统的PSNR计算有出入,有待考证,同学们多提意见。。。这里主要是为了将sr后的图和bicubic后的图的指标进行对比。

'''
https://blog.csdn.net/lly1122334/article/details/102471732?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242
'''
import cv2
import math
import numpy as np
from skimage import measure

def psnr(img1, img2):
    """计算PSNR"""
    mse = np.mean((img1 / 255 - img2 / 255) ** 2)  # 均方差
    if mse < 1.0e-10:  # 几乎无差异返回100
        return 100
    PIXEL_MAX = 1  # 像素最大值
    return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))

if __name__ == "__main__":
    img1 = cv2.imread('hr路径')#hr
    img2 = cv2.imread('sr路径')#sr
    img3 = cv2.imread('lr路径')#lr
    #print ('The shape of HR is:',img1.shape[0:2])

    '''获取相同的形状'''
    if img1.shape != img2.shape:
        print ('The shape of HR is',img1.shape)
        print ('The shape of SR is',img2.shape)
        img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0]),interpolation=cv2.INTER_CUBIC)
    img3 = cv2.resize(img3,(img1.shape[1],img1.shape[0]),interpolation=cv2.INTER_CUBIC)

    '''输出PSNR & SSIM'''
    print('PSNR of SR:',psnr(img1, img2))
    print('PSNR of bicubic:',psnr(img1, img3))
    print('SSIM of SR:',measure.compare_ssim(img1, img2, data_range=255, multichannel=True))
    print('SSIM of SR:',measure.compare_ssim(img1, img3, data_range=255, multichannel=True))

最好是能找个计算文件夹中所有内容的指标的平均值。

os&sys模块的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
批量删除行:包括删除前后行、删除连续行、删除奇数行、删除偶数行、删除空白行、删除重复行、删除特定行、删除含有关键字的行。 1、 批量删除前后行:删除多个文本文件最前面几行,或者最后面几行; 2、批量删除连续行:删除文本文件中 连续行,3 19(则删除3-19行的内容) 3、批量删除奇数行:删除文本文件中奇数的行,1、3、5、7…… 4、批量删除偶数行:删除文本文件中偶数的行,2、4、6、8…… 5、批量删除空白行:删除文本文件中 只含有空格或者制表符或者没有任何内容的行 6、批量删除重复行:重复行是针对单个文件来说的,删除重复行之后 文件内容的顺序保持源文件行的顺序,不会打乱。 7、批量删除特定行:特定行是自定义行,目前不支持省略输入,支持输入固定数字 例如: 1,3,7,10,20 8、批量删除含有关键字的行:删除含有关键字的行,可以是一个关键字,可以是多个关键字,(多个关键字: 某一行含有的多个关键字) 批量删除文本:包括删除文本、替换文本、删除行首数字、删除行首尾多少个字符。 9、批量删除数据(文本):删除多个文件中含有特定文本。 10、批量替换文本:多个文件批量替换文本 11、删除行首数字:删除行首的数字,一般对于行首递增的数字有明显效果。 12、批量删除行首字符:删除行首自定义多少个字符,一个字母,一个数字,一个汉字,一个标点都是一个字符。如果你不知道或者不想数多少个字符,可以让程序计算。 13、批量删除行尾字符:同上。 合并:包括普通合并、合并+数据、隔行合并、左右合并4种。 14、合并:普通合并,就是正常的多个文本文件进行合并,按照行的合并,第一个文件的最后一行,和第二个文件第一行不在同一行,是两个连续的行。以此类推。(好像是废话) 15、合并+数据:多个文件合并的时候直接添加数据,可以是多行数据。 16、合并+文件名:多个文件合并的时候直接添加文件名(不包括路径,不包括后缀名),可以是多行数据。 17、合并+数据+文件名:多个文件合并的时候先添加数据,再添加文件名(不包括路径,不包括后缀名)。 18、隔行合并:多个文件进行隔行合并。如果有3个文件进行隔行合并, 新文件的行的构成:File1的第一行 + File2的第一行 + File3的第一行 + File1的第二行 + File2的第二行 + File3的第二行 + …… 19、左右合并:左右合并因为需求不高,目前仅支持2个文件左右合并;如果想要进行多个文件左右合并,可以进行多次左右合并。 左右合并:原谅我这样命名下面说明 新文件构成:File1的第一行+ File2的第一行 作为新文件的第一行。 File1的第二行+ File2的第二行 作为新文件的第二行。 ……………………………… 中间可以自定义添加数据。 批量拆分:多个文件可以按照固定个数拆分、固定行数拆分、拆分奇偶行等模式进行拆分。 20、批量拆分,设置拆分新文件的个数:拆分成固定的个数。 说明:按照行进行拆分,不会把一行拆分成两个! 21、批量拆分,设置每个新文件的行数:拆分成多个文件。 22、批量拆分,拆分奇偶行:奇数的行拆分到一个文件,偶数的行拆分到一个文件批量添加数据:可以批量向文本文件最前面或者最后面添加数据、可以向行首尾添加数据、 可以向文件中添加文件名。 23、批量添加文本(数据)到文件首尾:可以添加多行文本到文件的首尾,支持添加过的不进行重复添加,(判断是否重复添加的标准是某一行完全一样,包括空格等符号)。 24、批量添加文本到行首尾:可以批量添加文本到每一行的最前面或者最后面。支持添加递增的数字。递增数字:就是每一行添加的数字不一样,或者叫做行号 25、批量添加文件名到文件首行:添加的文件名可以自定义包含路径和包含扩展名。 目前支持添加到行首,文件名前后可以自定义添加数据 其他处理方式:包括添加文件夹、重命名、恢复备份文件、查找个数、转换编码、重新排序。 26、添加文件夹,就是直接添加一个文件夹,说明添加文件或者添加文件夹的时候,如果已经存在则跳过添加。说明:添加文件夹的时候,不会将子文件夹添加进来。 27、重命名:并不是自定义文件名,这个名字是根据每个文件的第一行,并且提取每个文件的第一行作为新的文件名,旧的文件名也可以自定义保留。 说明:如果第一行没有合法的数据可以作为文件名,则顺延至第二行,以此类推。 28、恢复备份文件:程序会产生备份文件,如果处理后的文件不能满意,则恢复到原始状态。 说明:程序产生的备份文件是源文件名+“.bak”的形式。 注意:用户可以自定义要不要备份文件,程序中如果出现多次处理都要产生备份文件,每次产生备份文件先删除之前的备份文件。然后生成新的备份文件。(这个理念根据editplus中生成备份文件的方式) 恢复备份文件:程序中会将.bak后缀的文件恢复到去掉.bak后缀。如果新文件已经存在,则删除之后,再恢复。 (数据无价,建议用户自己先备份,然后使用本程序,如果处理的结果满意,则再考虑删除源文件) 29、批量查找个数:批量从多个文本文件中查找输入文本的个数,程序的状态一栏会显示找到了多少 30、批量转码:多个文本文件批量转成自己想要的文件编码: 常见的文件编码ANSI, Unicode, Unicode big endian, UTF-8。这四种编码类型都可以用windows自带的记事本打开。批量转换编码,方便在其他设备上查看。
WinForm是基于Windows操作系统的GUI开发框架,它提供了很多方便的控件和功能,可以用来开发各种Windows应用程序。当需要批量处理文件时,可以借助WinForm的功能来实现。 首先,要实现文件批量处理,我们需要提供一个用户界面,让用户可以选择需要处理文件。可以使用WinForm中的OpenFileDialog控件来实现文件选择的功能。 然后,我们可以使用C#语言中提供的文件操作方法来处理文件。可以使用System.IO命名空间下的File类和Directory类来进行文件的读取、写入、复制、删除等操作。可以结合循环和条件判断语句来遍历文件夹中的文件,并根据需求进行相应的处理。 在WinForm中,可以使用Button控件或者菜单栏来触发文件处理的操作。可以给按钮添加事件处理程序,在事件处理程序中调用文件处理的方法。 另外,为了提高用户体验,可以使用进度条等控件来显示文件处理的进度。可以通过在文件处理的过程中更新进度条的值来展示处理的进度。 最后,处理文件后,可以使用MessageBox或者另外一个窗口来提示用户处理结果,例如成功处理文件数量,或者是否出现错误等信息。 综上所述,借助WinForm的功能,我们可以实现文件批量处理。通过提供用户界面、文件选择、文件操作、进度条以及结果提示等功能,可以方便地进行文件处理。同时,需要注意异常处理,避免出现错误导致程序崩溃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毋小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值