点击下方卡片,关注“OpenCV与AI深度学习”
视觉/图像重磅干货,第一时间送达!
介绍
提取码:0857
参数:
src | 输入8位3通道图像(截取目标的大图) |
mask | 输入8位1或3通道图像(待改变颜色目标掩码区域图像) |
dst | 输出结果图(要求和src相同的大小和类型) |
red_mul | 红色通道乘积因子(建议值0.5~2.5) |
green_mul | 绿色通道乘积因子(建议值0.5~2.5) |
blue_mul | 蓝色通道乘积因子(建议值0.5~2.5) |
效果展示
实现步骤与源码
程序实现步骤:
(1) 使用selectROI函数框选指定目标;
(2) 使用三个滑动条动态改变red_mul,green_mul,blue_mul参数值;
(3) 滑动条回调函数中使用colorChange函数完成颜色改变。
src图:
(red_mul=0.17, green_mul=1.18, bule_mul=0)运行结果:
效果见开头效果视频,C++源码如下:
using namespace std;
using namespace cv;
Mat src;
int r = 100, g = 100, b = 100;
Rect rect;
void colorChange_Callback(int, void *)
{
Mat dst;
Mat mask = Mat::zeros(src.size(), src.type());
rectangle(mask, rect, Scalar::all(255), -1);
colorChange(src, mask, dst, r/100.0, g/100.0, b/100.0);
imshow("colorChange", dst);
}
int main()
{
src = imread("4.jpg");
rect = selectROI(src, true, false);
namedWindow("colorChange", WINDOW_NORMAL);
createTrackbar("R", "colorChange", &r, 250, colorChange_Callback);
createTrackbar("G", "colorChange", &g, 250, colorChange_Callback);
createTrackbar("B", "colorChange", &b, 250, colorChange_Callback);
colorChange_Callback(0, 0);
waitKey();
return 0;
}
注意:如果希望得到更准确的结果,可以用提取轮廓的方法精确设置mask,这样颜色改变后不会更改其他区域。比如唇色替换,可以先通过人脸关键点提取后,裁剪出嘴唇部分轮廓作为mask,这样结果也会更准确。
—THE END—
下载1:Pytorch常用函数手册
欢迎加入CV学习交流微信群!