zoukankan      html  css  js  c++  java
  • OpenCV 分离颜色通道与多通道图像混合

    同样学习自浅墨大神博客,代码与注释经自己习惯和编程风格做了些许修改,如希望亲自一睹大神风采,请猛搓下面链接:点击打开链接 

    本篇对应的大神博客篇目为:【OpenCV入门教程之五】 分离颜色通道&多通道图像混合

    由于代码较为简单,可自行建立工程配置 OpenCV后加入下面的代码自行运行尝试,图片需要自己准备,如果希望得到完整工程,浅墨大神的博客教程中有放出对应工程的下载链接


    包含头文件

    #include <cv.h>
    #include <highgui.h>
    using namespace cv;

    主体代码

    //定义相关变量
    Mat srcImage;
    Mat logoImage;
    vector<Mat> channels;
    Mat  imageBlueChannel;
    //Mat  imageGreenChannel;
    //Mat  imageRedChannel;
    
    logoImage = imread("dota_logo.jpg", 0);//读入图片转为灰度图
    srcImage = imread("dota_jugg.jpg");
    
    if (!logoImage.data) { printf("Oh,no,读取logoImage错误~! 
    "); return false; }//读取检测
    if (!srcImage.data) { printf("Oh,no,读取srcImage错误~! 
    "); return false; }
    
    split(srcImage, channels);//分离色图像色彩通道,则三通道图像成为三个单通道图像
    imageBlueChannel = channels.at(0);//将原图的蓝色通道引用返回给imageBlueChannel。注意是引用,相当于两者等价,修改其中一个另一个跟着变
    //imageGreenChannel = channels.at(1);//以此类推亦可得到其他两个通道
    //imageRedChannel = channels.at(2);
    
    //将原图的蓝色通道的(500,250)坐标处右下方的一块区域和logo图进行加权操作,将得到的混合结果存到imageBlueChannel中
    addWeighted(imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)), 1.0,
    	logoImage, 0.5, 0, imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)));//其他两个通道亦是此理
    merge(channels, srcImage);//将三个单通道重新合并成一个三通道
    
    namedWindow("游戏原画+logo蓝色通道 by浅墨");//显示效果图
    imshow("游戏原画+logo蓝色通道 by浅墨", srcImage);
    imwrite("游戏原画+logo蓝色通道 by浅墨.jpg", srcImage);//输出一张jpg图片到工程目录下 
    
    waitKey();//无限制的等待按键事件



    效果图(右下方的蓝色LOGO就是蓝色通道加权logo图像后的结果):





  • 相关阅读:
    shell bash memo
    python performance measure 02
    跨域的几种方法
    表示集合的数据结构:数组(Array),对象(Object),Map和Set
    [H5]range对象的setStart/setEnd方法
    文件上传:input file FileReader
    localStorage,sessionStorage,cookie使用场景和区别
    设置获取cookie,setCookie,getCookie
    js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别
    使用正则表达式--切分字符串
  • 原文地址:https://www.cnblogs.com/weixinhum/p/3916715.html
Copyright © 2011-2022 走看看