2024-04-01 16:57+7
[交流] 基于opencv的差分肤色调整
RT,在本人的新安科[同人][安科/安价][mygo][孤独摇滚][崩坏三]若叶睦在挑战往世乐土,但英桀都是乐队少女的样子(尽量日更)
中,出现了处理肤色不一致的需求;
由于本人不懂p图软件的高级功能,因此用python-opencv进行处理。
效果如图(右侧为处理后):
基本原理是吸取脸上的颜色后,
根据颜色范围筛选肤色所在位置,
将从脸上吸取到的颜色逐个像素涂上去。
基础代码如下(nga无法显示缩进,请自行处理):
另外,文件名不能含有汉字
其中,读取颜色值的方法如下(命令行python):
可以用美图秀秀等软件的裁剪功能获取图片特定位置的坐标:
移动右下角,显示宽101高97,所以右下角点的坐标是[97,101](可能差1像素,应将右下角放到颜色区域的中间)可能在处理一次后出现“只有部分肤色成功调整”,或者“不应该染色的区域被涂色”的情况;此时可打开新图片确认相应位置,以扩大或缩小代码中if的范围。欢迎交流
中,出现了处理肤色不一致的需求;
由于本人不懂p图软件的高级功能,因此用python-opencv进行处理。
效果如图(右侧为处理后):
基本原理是吸取脸上的颜色后,
根据颜色范围筛选肤色所在位置,
将从脸上吸取到的颜色逐个像素涂上去。
基础代码如下(nga无法显示缩进,请自行处理):
另外,文件名不能含有汉字
import cv2
img = cv2.imread("1.png", cv2.IMREAD_UNCHANGED)#加上参数cv2.IMREAD_UNCHANGED,以保留透明
for y in range(135,200):#可粗略选定要调整的范围
for x in range(200):
if (img[y,x][0]>150 and img[y,x][0]<220):#读取相应肤色点位的颜色值,以确定要改动的范围
if (img[y,x][1]>180 and img[y,x][1]<240):#对应一组四个数值的顺序,写成if嵌套是为了方便调整
if (img[y,x][2]>240 and img[y,x][2]<260):
img[y,x]=[233, 242, 255, 255]#从脸上读取到的颜色值
cv2.imwrite("2.png", img)
其中,读取颜色值的方法如下(命令行python):
python
>>>import cv2
>>>img = cv2.imread("1.png", cv2.IMREAD_UNCHANGED)
>>>img[162,59]#想要读取的坐标
然后就会输出一组四个数值
可以用美图秀秀等软件的裁剪功能获取图片特定位置的坐标:
移动右下角,显示宽101高97,所以右下角点的坐标是[97,101](可能差1像素,应将右下角放到颜色区域的中间)可能在处理一次后出现“只有部分肤色成功调整”,或者“不应该染色的区域被涂色”的情况;此时可打开新图片确认相应位置,以扩大或缩小代码中if的范围。欢迎交流