当前位置: 首页 > 科技观察

和闺蜜旅行三天,Python治愈了我的内耗……

时间:2023-03-14 16:40:49 科技观察

前段时间休年假,陪闺蜜长途旅行。心情不错,景色宜人,但真的很累,尤其是累的时候。几天没好好休息,一路颠簸着回家。谁能想到,刚踏出家门正要休息的我,就收到这样一条信息:要一张一张保存,没想到她四天拍了不到200张。这让我有点尴尬:首先,我现在的工作不需要剪图,PS早就卸载了。其次,即使我有PS,要设置几百张图片的预设也需要很长时间。又累又困还要做事,光想想就很煎熬。我有点不知所措,一边看着这些照片一边琢磨:既然原图画质还不错,修图也没什么,因为云层多,光线也不好很好,照片的色彩有点单调,可以适当增加饱和度,同时稍微降低亮度,也能拍出不错的照片。这时候突然想起前阵子看OpenCV的时候用的一个api。在python的帮助下,我们或许可以快速搞定这几百张图片。首先介绍HSV。HSV是一个颜色空间。与通过红、绿、蓝组合来描述颜色的RGB不同,HSV将颜色分为三个维度:色相(H)、饱和度(S)和亮度(V)。这样可以更直接地表达颜色的明暗与鲜艳程度,因此在图像识别领域得到广泛应用。借助opencv的split()函数,我们可以将图片的HSV变量分离出来,修改后使用merge()函数合成一张新的图片,从而达到批量修改饱和度和亮度的效果.同时split()还可以将图像的RGB三色通道分离出来,然后分别修改一个通道。话不多说,开始操作:importcv2importnumpyasnpimportosdefmodify_image(img_path,target_dir):#读取所有图片pic=cv2.imread(img_path,cv2.IMREAD_UNCHANGED)#修改图片为HSVpichsv=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)])#重置合并图片为RGBpictar=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/"))foriteminfiles:img_path=os.path.join(root,item)process_image(img_path,"./target/")经过三步五分二,代码就搞定了。光是看手机,上百张图片就处理完了。左边是修改前,右边是修改后。可以看到效果还是很明显的,颜色也饱满了很多。几分钟就拍完了所有的照片,女朋友有点不敢相信,但对结果很满意,当然我不会告诉她我是怎么做到的。