您的位置:首页 > 运维架构

OpenCV 学习记录6 视频读取人像并对脸部调色

2017-04-30 11:18 471 查看

前言

刚考完试就继续弄项目了,这次是想到可以调节图片的HSL,即色相、饱和度、亮度,根据调节这三个参数给图片加滤镜,不同参数会有不同效果,也没有学习过图像的知识,不清楚颜色通道、RGB或者HSL这些具体怎么调才能使得图片达到想要的效果,所以就死马当活马医,凭感觉调了几个参数啦。

整体思路是:

1.读取人像存到src;

2.拷贝src到tempsrc;

3.对tempsrc设定ROI区域;

4.对src进行HSL调节并存到dst;

5.dst选定mask并复制到ROI区域;

6.此时ROI区域已经是经过HSL调节后的样子了,显示tempsrc;

大概思路就是这样,然后这个HSL调节的函数是网上找到前辈的代码,直接拿来用了,也忘记原文地址就不贴原文博主了,如有侵权请告知,在此感谢原文博主。

这里有2个类,ColorSpace、 HSL,两个类是用来方便调节HSL的,这样主函数会比较简短。 直接上主函数代码:

#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include "HSL.hpp"

using namespace std;
using namespace cv;

static string window_name = "photo";
static Mat src;
static HSL hsl;
static int color = 0;
// 下面三个参数是在办公室调试时比较合适的数值,如果结果图的颜色不好就再调节trackbar确定合适参数
static int hue = 195;
static int saturation = 100;
static int brightness = 110;

static void callbackAdjust(int, void *)
{
Mat dst;
Mat tempsrc = src.clone();

hsl.channels[color].hue = hue - 180;
hsl.channels[color].saturation = saturation - 100;
hsl.channels[color].brightness = brightness - 100;

hsl.adjust(src, dst);
Mat imageROI = tempsrc(Rect(250, 250, 200, 200));  //设置ROI区域,是一个固定的矩形区域,根据实际适当调整
Mat mask = dst(Rect(250, 250, 200, 200));//同样大小的Mat才可以复制
mask.copyTo(imageROI);

imshow("结果图", tempsrc);

imshow(window_name, dst);
}

static void callbackAdjustColor(int, void *)
{
hue = hsl.channels[color].hue + 180;
saturation = hsl.channels[color].saturation + 100;
brightness = hsl.channels[color].brightness + 100;

setTrackbarPos("hue", window_name, hue);
setTrackbarPos("saturation", window_name, saturation);
setTrackbarPos("brightness", window_name, brightness);
callbackAdjust(0, 0);
}

int main() {

VideoCapture capture(0);
capture >> src;

imshow("origin", src); //显示原图

if (!src.data) {
cout << "error read image" << endl;
return -1;
}

namedWindow(window_name);
createTrackbar("color", window_name, &color, 6, callbackAdjustColor);
createTrackbar("hue", window_name, &hue, 2 * hue, callbackAdjust);
createTrackbar("saturation", window_name, &saturation, 2 * saturation, callbackAdjust);
createTrackbar("brightness", window_name, &brightness, 2 * brightness, callbackAdjust);
callbackAdjust(0, 0);

waitKey();
return 0;
}


附上两个类的文件

ColorSpace.hpp ColorSpace.cpp

HSL.hpp HSL.cpp

第一次传附件希望没问题,希望对大家有帮助啦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv