前陣子請了年假,陪女友出了趟遠門,途中心情愉悅景色宜人,不過累也是真的累,尤其在幾天都沒休息好還要一路顛簸回到家之後。
誰想到前腳剛踏回家門的我,剛準備休息,就收到了這樣的消息:
把圖片逐一保存,沒想到她四天功夫竟然拍了小兩百張照片。
這就有點讓我為難了:首先我現在的工作不需要切圖,PS也早就卸載了,其次就算有PS,光是給幾百張圖套上預設也得好一會兒才能搞定。又累又睏還要做事,想想就很折磨。
我有點一籌莫展,一邊琢磨一邊端詳起這些照片來:
#由於原圖品質還可以,所以如果修的話其實不需要太多操作,因為當天雲彩很多光線不是很好,照片顏色有點平淡,可以適當加一下飽和度,同時降低一下亮度,就能得到一張不錯的照片了。
這時我突然想起前陣子看OpenCV時用過的一個api,借助python,我們說不定能快速把這幾百張圖搞定。
首先介紹HSV,HSV是一種色彩空間,與RGB透過紅綠藍的組合來描述顏色不同,HSV把顏色拆分為色調(H)、飽和度(S)和明度( V)三個維度,這樣能夠更直接的表達色彩的明暗以及鮮豔程度,因此廣泛應用於影像辨識領域。
借助opencv的split()函數,我們可以將圖片的HSV變數分離出來,然後修改後再用merge()函數合成一張新的圖片,達到批量修改飽和度和明度的效果。同時split()也可以將圖片的RGB三顏色頻道分離出來,然後單獨對某個頻道進行修改。
話不多說,開始操作:
import cv2 import numpy as np import os def modify_image(img_path, target_dir): # 读取全部跟女朋友旅遊三天,Python治好了我的精神內耗... pic = cv2.imread(img_path, cv2.IMREAD_UNCHANGED) # 将跟女朋友旅遊三天,Python治好了我的精神內耗...修改为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)]) # 将合并后的跟女朋友旅遊三天,Python治好了我的精神內耗...重置为RGB pictar = cv2.cvtColor(new_pic, cv2.COLOR_HSV2BGR) # 获取原文件名 file_name = img_path.split("/")[-1] # 将跟女朋友旅遊三天,Python治好了我的精神內耗...写入目录 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/")
三下五除二搞定了程式碼,看眼手機的功夫,幾百張圖片就處理完畢了。左邊是修改前,右邊是修改後,可以看到效果還是很明顯的,顏色飽滿了許多。
幾分鐘就搞定了所有的圖片,女朋友滿臉不可思議,但對結果很滿意,我當然不會告訴她我是怎麼做到的啦。
以上是跟女朋友旅遊三天,Python治好了我的精神內耗...的詳細內容。更多資訊請關注PHP中文網其他相關文章!