創(chuàng)作背景
最近兒子用佳能單反相機(jī)拍了1000+張學(xué)校運動會的照片,默認(rèn)情況下佳能相機(jī)本身會保存有CR2原始格式和jpg格式的相片,老婆在通過筆記本電腦插入sd卡,進(jìn)行相片處理的時候,通過搜索框過濾出來所有jpg的圖像,不小心把所有jpg圖像都刪除了,兒子的班主任要求提交的是jpg圖像格式的照片。嗚呼!悲哉!幸好,CR2的照片在sd卡中還存在。
有沒有辦法批量地把CR2格式的照片轉(zhuǎn)換成jpg格式的照片呢?
首先,想到的是找一個圖像轉(zhuǎn)換軟件來完成批量轉(zhuǎn)換,百度了一下,居然發(fā)現(xiàn)了第一個就是:
下載安裝,使用一下,先是非會員最多只能處理3張圖片:
注冊會員,登陸成功,非VIP用戶轉(zhuǎn)換后的圖片會帶上水印,誒,看來不能白嫖呀。
估計別的圖片轉(zhuǎn)換的工具也是類似的情況,懶得找啦,決定嘗試自己用python開發(fā)一個轉(zhuǎn)換的小程序。
用Python實現(xiàn)RC2到j(luò)pg圖像的批量轉(zhuǎn)換
開發(fā)環(huán)境:windows10 + conda + python 3.11 + pycharm
通過conda創(chuàng)建虛擬環(huán)境
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方法不支持包含中文的路徑,如果路徑中包含中文,會導(dǎo)致保存失敗。
# 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)
# 避免中途中斷重復(fù)處理
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函數(shù)的路徑不能包含中文,否則會導(dǎo)致保存圖像失?。?/p>
2)可以通過“cv2.IMWRITE_JPEG_QUALITY”來控制保存的jpg圖像的質(zhì)量,取值為 0-100(默認(rèn)值 95),數(shù)值越大則圖片質(zhì)量越高;
3)rawpy中的“postprocess”方法提供了很多參數(shù),可以對raw圖像做很多后置處理(比如降噪,啟用白平衡,調(diào)整亮度,縮放等等)具體可以參考
RawPy class — rawpy 0.18.1 documentation
Params class — rawpy 0.18.1 documentation
在控制臺中通過虛擬環(huán)境運行代碼
把python代碼保存到“D:\image_converter\cr2_to_jpg.py”
通過“cd /d D:\image_converter” 進(jìn)入python腳本所在目錄
“python ./cr2_to_jpg.py”
進(jìn)一步優(yōu)化
目前python程序是一個一個圖像順序進(jìn)行轉(zhuǎn)換,如果圖像圖像比較多的花,還是會比較耗時的,可以通過python的多進(jìn)程模塊(multipleprocess)來進(jìn)行并行處理。這個實現(xiàn)起來也不難,目前沒有這個需求,暫時就不實現(xiàn)了。
參考資料
rawpy · PyPI
????API Reference — rawpy 0.18.1 documentation文章來源:http://www.zghlxwxcb.cn/news/detail-774376.html
opencv-python · PyPI文章來源地址http://www.zghlxwxcb.cn/news/detail-774376.html
到了這里,關(guān)于詳細(xì)教程:如何用python把佳能相機(jī)CR2格式的照片轉(zhuǎn)換為JPG格式?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!