• 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图像后的结果):





  • 相关阅读:
    android开发中调用python代码(带参数)
    安卓开发中实现自动点击功能、获取网络信息’-博客新人初来乍到,欢迎大佬多多指教。
    一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
    EditText搜索关键字,返回结果匹配关键字改变颜色
    Android studio无法创建类和接口问题解决办法。提示 Unable to parse template "Class"
    我的主页
    博客园美化-coffee
    apple面容、指纹验证使用
    iOS数据库FMDB操作
    UIBezierPath绘图基础教程
  • 原文地址:https://www.cnblogs.com/weixinhum/p/3916715.html
Copyright © 2020-2023  润新知