首页 > 编程语言 >OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)

时间:2022-10-18 13:05:09浏览次数:76  
标签:src -- mask C++ 源码 green mul colorChange red


导读

本期将介绍并演示OpenCV中使用colorChange实现图像中指定目标颜色改变的效果。

介绍

colorChange与seamlessClone同属于Seamless Cloning部分,算法均来自下面这篇论文:OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_#include

​https://www.cs.jhu.edu/~misha/Fall07/Papers/Perez03.pdf​

百度网盘下载:

链接:https://pan.baidu.com/s/1Ma_9ZF4r0SgNmfygHe3kgQ

提取码:0857

算法解读可参考下面链接:

使用colorChange函数可以轻松将一幅图像中的指定目标颜色改变并尽可能保留其边缘信息,自然融合。函数说明:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_滑动条_02

参数:

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图:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_参数设置_03

框选ROI区域设定mask与参数设置(red_mul=1.0, green_mul=1.78, bule_mul=2.35)以及运行结果:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_参数设置_04

src图:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_#include_05

框选ROI区域设定mask与参数设置(red_mul=1.17, green_mul=0.47, bule_mul=1.23)以及运行结果:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_#include_06

src图:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_#include_07

框选ROI区域设定mask与参数设置(red_mul=0.18, green_mul=1.17, bule_mul=2.35)以及运行结果:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_#include_08

(red_mul=0.17, green_mul=1.18, bule_mul=0)运行结果:

OpenCV无缝融合应用(二)--指定目标颜色改变(附C++源码)_参数设置_09

效果见开头效果视频,C++源码如下:


#include <iostream>
#include <opencv2/opencv.hpp>

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,这样结果也会更准确。

更多视觉图像处理相关内容,请关注:OpenCV与AI深度学习。

标签:src,--,mask,C++,源码,green,mul,colorChange,red
From: https://blog.51cto.com/stq054188/5765847

相关文章

  • 授权书范本
    委托他人代表自己行使自己的合法权益,委托人在行使权力时需出具委托人的法律文书,下面是由出国留学网编辑为大家整理的“投标法人委托书范本”,仅供参考,欢迎大家阅读。投......
  • 12315投诉
    投诉​​张维​​投诉选择投诉单位填写消费者信息填写业务信息投诉完成投诉须知按照中央有关要求,市场监管部门已将原工商12315、原质检12365、原食药12331、原价监12358、原......
  • 分享15个自动写稿神器和文案素材网站
    我是卢松松,点点上面的头像,欢迎关注我哦!松松博客今日分享15个自动写稿、AI文章的写文章神器,还有文案素材,以后文章写作、素材寻找,都不愁了。不过要提醒大家两点:(1)本文纯分享......
  • 软件需求设计方法学全程实例剖析幻灯片03-业务建模(2020.03更新)
    pdf文件下载:​​http://www.umlchina.com/training/slide.html​​......
  • OpenCV无缝融合应用(三)--局部区域亮度调整(附C++源码)
    导读本期将介绍并演示OpenCV中使用illuminationChange实现图像中局部区域亮度调整的效果。介绍OpenCV图像无缝融合-seamlessClone介绍与使用(Python/C++源码)OpenCV无缝融......
  • 麦肯锡
     返回Video目录目录1.IntroductionandCourseOverview课程简介1.1Welcome欢迎同学们!Video(00:00:48) 1.2MessagefromDom麦肯锡董事长谈课程设立初衷Video(00:00:5......
  • 儒家修身之道课后考试
     返回儒家修身之道课后考试目录目录第一讲绪论:课程简介及相关预备知识1-1课程简介教学视频:1-1课程简介(00:21:02) 1-2儒家是一门知识而不是宗教教学视频:1-2儒家是一门知识......
  • UMLChina建模竞赛题答案及解析(试卷1)
    建模竞赛题比起《软件方法》书中的题目要更难一些,可以作为熟悉了《软件方法》中的基本知识之后的进一步练习。题目颇有些陷阱,应一些同学的要求,挑部分题目给出答案并详细讲解......
  • C++ | PaddleOCR+OpenCV实现文字识别步骤与代码演示
    导读本期将介绍并演示C++OpenCV使用PaddleOCR做文字识别的步骤与效果。介绍百度深度学习框架PaddlePaddle开源的OCR项目PaddleOCR近期霸榜github。使用测试后发现识别效果......
  • 关于 iPhone 上的相机功能
    关于iPhone上的相机功能了解iPhone上的摄影风格、快录功能、超广角摄像头和其他相机功能。 通过摄影风格功能锁定您的风格借助iPhone13各款机型和iPhoneSE(第3代......