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学习之视频读取与帧的提取、显示及保存
- opencv 学习之 视频读取
- Pythone OpenCV学习笔记之:视频文件读取与保存
- OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读
- 【OpenCV学习笔记】四、摄像头/视频的读取与写入
- OpenCV学习(二)读取视频文件和摄像头
- 【openCV学习笔记】【2】读取并播放一段视频
- OpenCV 3学习笔记(四)读取并播放视频
- OpenCV(学习笔记6)-视频读取与显示
- python opencv入门(学习笔记no.3)-从摄像头读取视频并显示
- OpenCV学习之视频读取与帧的提取、显示及保存
- OPenCV学习之视频读取,与帧的提取、显示与保存
- Opencv学习笔记----读取视频
- Opencv学习_3 (Opencv读取视频 &视频进度控制 &写视频)
- OpenCV学习笔记(4)视频文件的读取与保存
- Opencv学习_3 (Opencv读取视频 &视频进度控制 &写视频)
- 学习opencv——从摄像机读取视频流并进行边缘检测
- 学习OPENCV之读取图像和视频
- OpenCV学习记录之视频中的火焰检测识别
- OpenCV学习笔记三:视频读取