跟女朋友旅游三天,Python治好了我的精神內(nèi)耗...
前陣子請了年假,陪女朋友出了趟遠(yuǎn)門,途中心情愉悅景色宜人,不過累也是真的累,尤其在幾天都沒休息好還要一路顛簸回到家之后。
誰想到前腳剛踏回家門的我,剛準(zhǔn)備休息,就收到了這樣的消息:
把圖片逐一保存,沒想到她四天功夫竟然拍了小兩百張照片。
這就有點讓我為難了:首先我現(xiàn)在的工作不需要切圖,PS也早就卸載了,其次就算有PS,光是給幾百張圖套上預(yù)設(shè)也得好一會兒才能搞定。又累又困還要做事,想想就很折磨。
我有點一籌莫展,一邊琢磨一邊端詳起這些照片來:
由于原圖質(zhì)量還可以,所以如果修的話其實不需要太多操作,因為當(dāng)天云彩很多光線不是很好,照片顏色有點平淡,可以適當(dāng)加一下飽和度,同時降低一下亮度,就能得到一張不錯的照片了。
這時我突然想起前陣子看OpenCV時用過的一個api,借助python,我們說不定能快速把這幾百張圖搞定。
首先介紹一下HSV,HSV是一種顏色空間,與RGB通過紅綠藍(lán)的組合來描述顏色不同,HSV把顏色拆分為色調(diào)(H)、飽和度(S)和明度(V)三個維度,這樣能夠更直接的表達(dá)色彩的明暗以及鮮艷程度,因此廣泛應(yīng)用于圖像識別領(lǐng)域。
借助opencv的split()函數(shù),我們可以將圖片的HSV變量分離出來,然后修改后再用merge()函數(shù)合成一張新的圖片,達(dá)到批量修改飽和度和明度的效果。同時split()也可以將圖片的RGB三顏色通道分離出來,然后單獨(dú)對某個通道進(jìn)行修改。
話不多說,開始操作:
import cv2
import numpy as np
import os
def modify_image(img_path, target_dir):
# 讀取全部圖片
pic = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)
# 將圖片修改為HSV
pichsv = cv2.cvtColor(pic, cv2.COLOR_BGR2HSV)
# 提取飽和度和明度
H,S,V = cv2.split(pichsv)
# S為飽和度,V為明度
new_pic = cv2.merge([np.uint8(H), np.uint8(S*1.4), np.uint8(V*0.9)])
# 將合并后的圖片重置為RGB
pictar = cv2.cvtColor(new_pic, cv2.COLOR_HSV2BGR)
# 獲取原文件名
file_name = img_path.split("/")[-1]
# 將圖片寫入目錄
cv2.imwrite(os.path.join(target_dir, file_name), pictar)
root, dirs, files = next(os.walk("./test/"))
for item in files:
img_path = os.path.join(root,item)
process_image(img_path, "./target/")
三下五除二搞定了代碼,看眼手機(jī)的功夫,幾百張圖片就處理完畢了。左邊是修改前,右邊是修改后,可以看到效果還是很明顯的,顏色飽滿了許多。
幾分鐘就搞定了所有的圖片,女朋友滿臉不可思議,但對結(jié)果很滿意,我當(dāng)然不會告訴她我是怎么做到的啦。