OpenCV 学习记录5 图像通道分离、对比度和亮度调整

来源:互联网 发布:中国的顶级域名 编辑:程序博客网 时间:2024/06/05 22:15

图像通道分离函数split的使用

#include <cv.h>  #include <highgui.h>  #include <iostream> using namespace cv;using namespace std;int main() {    vector<Mat> channels;    Mat imageBlueChannel, imageGreenChannel, imageRedChannel;    Mat srcimage = imread("dota_pa.jpg");    Mat logoImage = imread("dota_logo.jpg");    split(srcimage, channels);    imageBlueChannel = channels.at(0);    imageGreenChannel = channels.at(1);    imageRedChannel = channels.at(2);    imshow("Blue", imageBlueChannel);    imshow("Green", imageGreenChannel);    imshow("Red", imageRedChannel);    waitKey(0);    return 0;}

这里把各个单颜色通道的图片给show出来后看见的都是灰色的,因为都是单色所以显示出来就是灰色的啦,仔细看三张图片可以看出确实色彩是不一样的,再次强调OpenCV默认的颜色顺序是BGR。

图像对比度和亮度调整

#include<iostream>#include<opencv2\core\core.hpp>#include<opencv2\highgui\highgui.hpp>using namespace std;using namespace cv;static void on_ContrastAndBright(int, void *);int g_nContrastValue;int g_nBrightValue;Mat g_srcImage, g_dstImage;int main(){    g_srcImage = imread("dota_pa.jpg");    if (!g_srcImage.data) { cout << "读取dota_pa.jpg错误\n"; return false; }    g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type()); //创建同大小,同类型的矩阵    //设定初始值    g_nBrightValue = 80;    g_nContrastValue = 80;    namedWindow("效果图");    //很重要,不先定义一个窗口后面的Trackbar就无法在同一个窗口里显示出来    createTrackbar("对比度:", "效果图", &g_nContrastValue, 300, on_ContrastAndBright);    createTrackbar("亮  度:", "效果图", &g_nBrightValue, 200, on_ContrastAndBright); // 调用回调函数    on_ContrastAndBright(g_nContrastValue, 0);    on_ContrastAndBright(g_nBrightValue, 0);    waitKey(0) ;    return 0;}static void on_ContrastAndBright(int, void *){//这个回调函数的参数不太理解,查了下说是规定要有这两个参数。。。    for(int y=0; y< g_srcImage.rows;y++)        for(int x = 0; x< g_srcImage.cols; x++)            for (int c = 0;c < 3;c++)            {                g_dstImage.at<Vec3b>(y, x)[c] =                saturate_cast<uchar>((g_nContrastValue * 0.01)*(g_srcImage.at<Vec3b>(y, x)[c]) + g_nBrightValue );            }    imshow("原始图", g_srcImage);    imshow("效果图", g_dstImage);}   

这个也是跟着书上弄却还是花了好长时间debug,略心塞,不想多分析了。
感觉基本操作差不多了,对OpenCV也有了一定了解,该着手想想怎么实现我的美妆功能了。
依旧,欢迎指出问题和交流问题。

0 0
原创粉丝点击