Python 用 OpenCV 实现 PS 高光/阴影选区

您所在的位置:网站首页 去除高光ps Python 用 OpenCV 实现 PS 高光/阴影选区

Python 用 OpenCV 实现 PS 高光/阴影选区

#Python 用 OpenCV 实现 PS 高光/阴影选区| 来源: 网络整理| 查看: 265

见 PS 高光/阴影 精准选区方法,现用 Python 代码实现类似的 PS 中高光/阴影选区。

抠取阴影区后便可以对阴影区做提亮操作,可用于逆光修复,阴影提亮的具体实现及效果见《PS 阴影/高光中阴影提亮效果之 Python 实现》 代码如下:

# -*- coding: utf-8 -*- # @Time : 2021-04-28 20:45 # @Author : AlanWang4523 # @FileName: py_select_shadows_highlight.py import os import sys import cv2 import numpy as np def hanlde_img(path): # 根据路径读取图片 img = cv2.imread(path) img = img.astype(np.float)/255.0 # 分离 RGB 三个通道,注意:openCV 中图像格式是 BGR srcR = img[:, :, 2] srcG = img[:, :, 1] srcB = img[:, :, 0] # 将原图转成灰度图 grayImg = 0.299 * srcR + 0.587 * srcG + 0.114 * srcB # 高光选区 # maskThreshold = 0.64 # luminance = grayImg * grayImg # luminance = np.where(luminance > maskThreshold, luminance, 0) # 阴影选区 maskThreshold = 0.33 luminance = (1 - grayImg) * (1 - grayImg) luminance = np.where(luminance > maskThreshold, luminance, 0) mask = luminance > maskThreshold # 显示正交叠底图 # img[:, :, 0] = luminance # img[:, :, 1] = luminance # img[:, :, 2] = luminance # 显示选区内原图 img[:, :, 0][~mask] = 0 img[:, :, 1][~mask] = 0 img[:, :, 2][~mask] = 0 img = img * 255 img = img.astype(np.uint8) # 创建图片显示窗口 title = "ShadowHighlight" cv2.namedWindow(title, cv2.WINDOW_NORMAL) cv2.resizeWindow(title, 800, 600) cv2.moveWindow(title, 0, 0) while True: # 循环显示图片,按 ‘q’ 键退出 cv2.imshow(title, img) if cv2.waitKey(1) == ord('q'): break cv2.destroyAllWindows() if __name__ == '__main__': ''' 运行环境:Python 3 执行:python3 py_pic_handle.py 如:python3 py_pic_handle.py test.jpg ''' if len(sys.argv) == 1: print("参数错误:未传入图片路径!") sys.exit(-1) img_path = sys.argv[1] print("img_path Params:", img_path) hanlde_img(img_path)

1、阴影区抠图 图片名称

和 PS 对比图,如下图左边是用 PS 选出的阴影区,右边是通过 Python 选出的阴影区,低于阈值的像素全部置黑 在这里插入图片描述 2、高光区抠图 图片名称 和 PS 对比图,如下图左边是用 PS 选出的高光区,右边是通过 Python 选出的高光区,低于阈值的像素全部置黑 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3