批量处理文件

目 录

前言

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

查看图片通道数

注意不是所有图片都是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分割文件目录/文件名和后缀

综合

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图像和原图不一样大时,有双三次插值对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))
上一篇:SQL特殊注入方式及注意事项


下一篇:十六、mysql的备份与恢复(二)--mysqldump