在学习《OpenCV3编程入门》这本书中的5.3节分离颜色通道、多通道图像混合时,发现了几个值得注意的点,因为书上没有说明或强调,稍有不慎可能还是会出错,然后让你气cry!所以我在此记录一下,至于其它书籍有没有提或者你早就知道噜,本人都NBCS嘻嘻,看看就好!

分离色彩通道的效果

书中只给了关键代码,且没有效果图,所以不测试一下的人不一定能理解这个分离的作用,所以本人花了个13分钟完整了一下代码,如下:

#include<opencv2/core.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
void main()
{vector<Mat> channels; //必须有命名空间stdMat imageBlueChannel,imageGreenChannel,imageRedChannel;Mat srcImage = imread("RGB测试.png");imshow("【原图】", srcImage);//把一个3通道图像转换成3个单通道图像split(srcImage, channels);imageBlueChannel = channels.at(0);imageGreenChannel = channels.at(1);imageRedChannel = channels.at(2);imshow("【蓝色】", imageBlueChannel);imshow("【绿色】", imageGreenChannel);imshow("【红色】", imageRedChannel);waitKey(0);
}

如果你和我刚开始一样,随便找个RGB图像测试一下,不一定能看懂那个结果。所以努力的本人为了搞懂效果,亲自画了张图,红绿蓝分离开来,使得效果更明显。效果如下:




可以看到引用哪个颜色分离,首先原图变为单通道灰度图,然后相应的颜色会变浅色,而其余的颜色会变深,这就是分离成单通道的效果。至于具体原理是什么,我也就不清楚噜,毕竟我的opencv也才1.3级。

多通道图像混合

这个主要是注意一下5.3.3的示例程序,它是将多通道图像分离,然后将三种颜色分别进行图像混合,得出的结果就是让你混合的logo图变成相应的颜色,NBCS的用处罢了。但是,在我把其函数部分改进的时候还是吃了苦呕,气死噜!
因为时间有限,只测试了温暖潮湿的蓝色部分嘻嘻!其余颜色测试只需改掉一个参数即可,书上都有,自己去看噜!改进的代码如下:

bool MultiChannelBlending(Mat srcImage, Mat logoImage)
{vector<Mat> channels;Mat imageBlueChannel;//分离色彩通道split(srcImage, channels);//将蓝色通道引用赋值imageBlueChannel = channels.at(0);//在蓝色通道中设定ROI区域,位置依旧选择左下角Mat imageROI = imageBlueChannel(Rect(0, srcImage.rows - logoImage.rows, logoImage.cols, logoImage.rows));imshow("ROI", imageROI);//加权线性混合addWeighted(imageROI, 1.0, logoImage, 0.5, 0, imageROI);//合并通道merge(channels, srcImage);imshow("【游戏原画+logo蓝色通道】", srcImage);return true;
}
void main()
{Mat image = imread("modao.bmp");Mat logo = imread("dnf_logo.jpg");if(MultiChannelBlending(image,logo))cout << "运行成功,得出你所需的图像!" << endl;waitKey(0);
}

首先又是那个恶熏的错误:Microsoft C++ 异常: cv::Exception,调用堆栈那里提示的错误的代码是

addWeighted(imageROI, 1.0, logoImage, 0.5, 0, imageROI);

我以为不能这样该,换成书上的那种还是不行,,又是弄了130分钟,最终才发现真正出错的是这一行

Mat logo = imread(“dnf_logo.jpg”);

简直气鼠,原来是忘了在后面加个0,变成灰度图

Mat logo = imread(“dnf_logo.jpg”,0);

不过也能说得通,从之前分离色彩通道的结果可以看出,分离后引用单个颜色分量部分的图是单通道灰度图,而我使用的logo图是彩色的,就这么加权混合确实不合理,何况最后还得呈现出logo图变成蓝色的效果,所以在进行加权混合前要确保是灰度图,当然书上没有说我有什么办法,清者自清噜!顺便吐槽这个报错真是够了,报了也看不出问题所在,真想说一句“柠檬酸了”呕!效果图如下,本质的蓝色:

OpenCV学习之多通道图像的混合相关推荐

  1. youcans 的 OpenCV 学习课—4.图像的叠加与混合

    youcans 的 OpenCV 学习课-4.图像的叠加与混合 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的加法.叠加与混合,提供完整例程和运行结果:加法 ...

  2. youcans 的 OpenCV 学习课—5.图像的几何变换

    youcans 的 OpenCV 学习课-5.图像的几何变换 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 几何变换是指对图像的位置.大小.形状.投影进行变换,是将图像从 ...

  3. youcans 的 OpenCV 学习课—3.图像的创建与修改

    youcans 的 OpenCV 学习课-3.图像的创建与修改 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. OpenCV 中图像的数据结构是 ndarray 多维数组, ...

  4. youcans 的 OpenCV 学习课—2.图像读取与显示

    youcans 的 OpenCV 学习课-2.图像读取与显示 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的读取.保存和显示.除基本方法和例程外,还给出了从 ...

  5. C++下opencv学习笔记(一)(图像的简单读取丶显示与存储)

    C++下opencv学习笔记(一)(图像的简单读取丶显示与存储) 前言 学习C++ OpenCV,第一需要具备面向对象语言的基础,第二要对图像处理机器学习有基础了解,容易入门.觉得自己基础已经有了可以 ...

  6. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  7. Opencv学习笔记(八) -- 图像色彩空间转换

    1.常见图像色彩空间 RGB RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道 ...

  8. OpenCV学习笔记之图像融合

    一.线性融合操作 线性混合操作 也是一种典型的二元(两个输入)的 像素操作 : 通过在范围  内改变  ,这个操可以用来对两幅图像或两段视频产生时间上的 画面叠化 (cross-dissolve)效果 ...

  9. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  10. OpenCV学习笔记五-图像混合

    将两张图片混合 P6 图像混合 #include<iostream> #include<opencv2/opencv.hpp>using namespace std; usin ...

最新文章

  1. tp5+linux+apache php7.1.30环境下,上传图片报错:mkdir():permission denied
  2. CS起源pointermap找基址+工具函数测试
  3. Oracle systemstate dump介绍
  4. 机器学习集成模型学习——Bagging集成学习(三)
  5. pascal闪电入门系列目录
  6. 三种class反编译工具jad、frontEndPlus、jd-gui 的使用方法
  7. 应用软件提示服务器正在运行,服务器正在运行中怎么解决?IE浏览器服务器正在运行中的解决方法...
  8. uc android快捷键,UC手机浏览器助力Android快速上网
  9. 编程中,有哪些好的习惯一开始就值得坚持?
  10. 人事档案的重要性及注意事项
  11. 小学语文生字表3087字(人教版)
  12. 【Python 3.7】电影票:有家电影院根据观众的年龄收取不同的票价:不到3岁的观众免费; 3~12岁的观众为10美元;超过12岁的观众为15美元。请编写一个循环,在其中询问用户的年龄,指出其票价。
  13. Excel合并单元格读取
  14. LeetCode-1646-获取生成数组中的最大值
  15. Android11 HAL层开发
  16. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day19】—— 集合框架3
  17. Java Web Start(Jnlp)教程
  18. 关于爬虫学习的一些小小记录(三)——BeautifulSoup
  19. 手心输入法人名模式导致navicat闪退
  20. 传奇开服架设要具备什么条件

热门文章

  1. 网易BUFF产品体验报告
  2. 手机号获取验证码进行登录注册
  3. 2021夏令营全记录·华科计算机、中科院网络中心、中科院软件所、浙软
  4. STM32+A4988控制步进电机
  5. WPS标题段前间距设置无效解决方案
  6. wps word设置级别多级目录标题
  7. ps批量修改名片文字_pS如何在图中添加和修改文字
  8. archlinux设置屏幕亮度
  9. MybatisPlus联合查询
  10. 干货分享|视频制作技巧-视频拍摄/视频剪辑