当前位置:   article > 正文

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

python处理cr2

创作背景

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

  1. import rawpy
  2. import cv2
  3. import os
  4. if __name__ == '__main__':
  5. cr2_image_dir = 'D:\\运动会'
  6. # opencv的imwrite方法不支持包含中文的路径,如果路径中包含中文,会导致保存失败。
  7. # jpg_image_dir = 'D:\\运动会_jpg'
  8. jpg_image_dir = 'D:\\ydh_jpg' # 修改为非中文路径,避免保存失败
  9. os.makedirs(jpg_image_dir, exist_ok=True)
  10. cr2_files = os.listdir(cr2_image_dir)
  11. cnt = 1
  12. print(f'total: {len(cr2_files)}')
  13. for cr2_file in cr2_files:
  14. if cr2_file.endswith('.CR2'):
  15. jpg_file_name = cr2_file.replace('.CR2', '') + '.jpg'
  16. jpg_file_path = os.path.join(jpg_image_dir, jpg_file_name)
  17. # 避免中途中断重复处理
  18. if os.path.exists(jpg_file_path):
  19. continue
  20. cr2_img = rawpy.imread(os.path.join(cr2_image_dir, cr2_file)) # access to the RAW image
  21. rgb_img = cr2_img.postprocess() # a numpy RGB array
  22. bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR) # the OpenCV image
  23. if cv2.imwrite(jpg_file_path, bgr_img, [cv2.IMWRITE_JPEG_QUALITY, 90]):
  24. print(f'{cnt}. save to {jpg_file_path}')
  25. else:
  26. print(f'fail to convert: {cr2_file}')
  27. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/140941
推荐阅读
相关标签
  

闽ICP备14008679号