10

跟女朋友旅游三天,Python治好了我的精神内耗

 1 year ago
source link: http://www.justdopython.com/2022/09/16/python-imgmodify/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

跟女朋友旅游三天,Python治好了我的精神内耗

2022-09-16

| python

前阵子请了年假,陪女朋友出了趟远门,一路心情愉悦景色宜人,不过累也是真的累,尤其在几天都没休息好还要一路颠簸回到家之后。

20220916210706.jpg

谁想到前脚刚踏回家门的我,刚准备休息,就收到了这样的消息:

20220916210244.jpg

把图片逐一保存,没想到她四天功夫竟然拍了小两百张照片…

这就有点让我为难了,首先我现在的工作不需要切图,PS也早就卸载了,其次就算有PS,光是给几百张图套上预设也得好一会儿才能搞定。

我有点一筹莫展,一边琢磨一边端详起这些照片来:

20220916210246.jpg

由于原图质量还可以,所以如果修的话其实不需要太多操作:因为当天云彩很多光线不是很好,照片颜色有点平淡,可以适当加一下饱和度;同时由于画面上好似覆盖着一层薄雾,可以考虑降低一下亮度,能做好这两点,就是一张不错的照片了。

这是我突然想起前阵子用OpenCV时看到的一个api,借助python,我们说不定能快速把这几百张图搞定。

首先介绍一下HSV颜色空间,HSV是一种颜色空间,与RGB通过红绿蓝的组合来描述颜色不同,HSV把颜色拆分为色调(H)、饱和度(S)和明度(V)三个维度,这样能够更直接的表达色彩的明暗以及鲜艳程度,因此广泛应用于图像识别领域。

20220916210247.png

借助opencv的split()函数,我们可以将图片的HSV变量分离出来,然后再用merge()函数合成一张新的图片,达到批量修改饱和度和明度的效果。

split也可以将图片的RGB三颜色通道分离出来,然后单独对某个通道进行修改。

话不多说,开始操作:

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/")

看眼手机的功夫,几百张图片就处理完毕了。左边修改前右边修改后,可以看到效果还是很明显的。

20220916210288.jpg

几分钟就搞定了所有的图片,女朋友喜笑颜开,我当然不会告诉她我是怎么做到的啦。

以上就是今天的全部内容,我们下次再见~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK