详细教程:如何用python把佳能相机CR2格式的照片转换为JPG格式? 您所在的位置:网站首页 佳能相机怎么raw格式转换 详细教程:如何用python把佳能相机CR2格式的照片转换为JPG格式?

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

2024-07-03 11:21| 来源: 网络整理| 查看: 265

创作背景

最近儿子用佳能单反相机拍了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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有