创作背景
最近儿子用佳能单反相机拍了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文章来源:https://www.toymoban.com/news/detail-774376.html
opencv-python · PyPI文章来源地址https://www.toymoban.com/news/detail-774376.html
到了这里,关于详细教程:如何用python把佳能相机CR2格式的照片转换为JPG格式?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!