详细教程:如何用python把佳能相机CR2格式的照片转换为JPG格式?

创作背景

最近儿子用佳能单反相机拍了1000+张学校运动会的照片,默认情况下佳能相机本身会保存有CR2原始格式和jpg格式的相片,老婆在通过笔记本电脑插入sd卡,进行相片处理的时候,通过搜索框过滤出来所有jpg的图像,不小心把所有jpg图像都删除了,儿子的班主任要求提交的是jpg图像格式的照片。呜呼!悲哉!幸好,CR2的照片在sd卡中还存在。

有没有办法批量地把CR2格式的照片转换成jpg格式的照片呢?

首先,想到的是找一个图像转换软件来完成批量转换,百度了一下,居然发现了第一个就是:

下载安装,使用一下,先是非会员最多只能处理3张图片:

注册会员,登陆成功,非VIP用户转换后的图片会带上水印,诶,看来不能白嫖呀。

估计别的图片转换的工具也是类似的情况,懒得找啦,决定尝试自己用python开发一个转换的小程序。

用Python实现RC2到jpg图像的批量转换

开发环境:windows10 + conda + python 3.11 + pycharm

通过conda创建虚拟环境

conda create -y -n img_converter python=3.11

conda activate img_converter

通过pip安装第三方依赖

pip install rawpy opencv-python

编写Python代码

cr2_to_jpg.py

import rawpy
import cv2
import os

if __name__ == '__main__':
    cr2_image_dir = 'D:\\运动会'
    # opencv的imwrite方法不支持包含中文的路径,如果路径中包含中文,会导致保存失败。
    # jpg_image_dir = 'D:\\运动会_jpg'
    jpg_image_dir = 'D:\\ydh_jpg'  # 修改为非中文路径,避免保存失败
    os.makedirs(jpg_image_dir, exist_ok=True)
    cr2_files = os.listdir(cr2_image_dir)
    cnt = 1
    print(f'total: {len(cr2_files)}')
    for cr2_file in cr2_files:
        if cr2_file.endswith('.CR2'):
            jpg_file_name = cr2_file.replace('.CR2', '') + '.jpg'
            jpg_file_path = os.path.join(jpg_image_dir, jpg_file_name)
            # 避免中途中断重复处理
            if os.path.exists(jpg_file_path):
                continue
            cr2_img = rawpy.imread(os.path.join(cr2_image_dir, cr2_file))  # access to the RAW image
            rgb_img = cr2_img.postprocess()  # a numpy RGB array
            bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR)   # the OpenCV image

            if cv2.imwrite(jpg_file_path, bgr_img, [cv2.IMWRITE_JPEG_QUALITY, 90]):
                print(f'{cnt}. save to {jpg_file_path}')
            else:
                print(f'fail to convert: {cr2_file}')

            cnt += 1

备注:

1)opencv的imwrite函数的路径不能包含中文,否则会导致保存图像失败;

2)可以通过“cv2.IMWRITE_JPEG_QUALITY”来控制保存的jpg图像的质量,取值为 0-100(默认值 95),数值越大则图片质量越高;

3)rawpy中的“postprocess”方法提供了很多参数,可以对raw图像做很多后置处理(比如降噪,启用白平衡,调整亮度,缩放等等)具体可以参考

RawPy class — rawpy 0.18.1 documentation

Params class — rawpy 0.18.1 documentation

在控制台中通过虚拟环境运行代码

把python代码保存到“D:\image_converter\cr2_to_jpg.py”

通过“cd /d D:\image_converter” 进入python脚本所在目录

“python ./cr2_to_jpg.py”

进一步优化

目前python程序是一个一个图像顺序进行转换,如果图像图像比较多的花,还是会比较耗时的,可以通过python的多进程模块(multipleprocess)来进行并行处理。这个实现起来也不难,目前没有这个需求,暂时就不实现了。

参考资料

rawpy · PyPI

​​​​API Reference — rawpy 0.18.1 documentation

opencv-python · PyPI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老狼IT工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值