分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
本系列文章由@浅墨_毛星云 出品,转载请注明出处。
文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257
作者:毛星云(浅墨) 邮箱: happylifemxy@163.com
写作当前博文时配套使用的OpenCV版本: 2.4.8
上篇文章中我们讲到了使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操作。
而为了更好的观察一些图像材料的特征,有时需要对RGB三个颜色通道的分量进行分别显示和调整。通过OpenCV的split和merge方法可以很方便的达到目的。
这就是我们这篇文章的主要内容。依然是先看一张截图吧:
一、分离颜色通道
就让我们来详细介绍一下这两个互为冤家的函数。首先是进行通道分离的split函数。
<1>split函数详解
将一个多通道数组分离成几个单通道数组。ps:这里的array按语境译为数组或者阵列。
这个split函数的C++版本有两个原型,他们分别是:
C++: void split(const Mat& src, Mat*mvbegin);C++: void split(InputArray m,OutputArrayOfArrays mv);
关于变量介绍:
- 第一个参数,InputArray类型的m或者const Mat&类型的src,填我们需要进行分离的多通道数组。
- 第二个参数,OutputArrayOfArrays类型的mv,填函数的输出数组或者输出的vector容器。
就如上一节中讲到方法一样,这里的OutputArrayOfArrays我们通过【转到定义】大法,可以查到它是_OutputArray的引用,那么我们在源代码中再次通过【转到定义】看到_OutputArray类的原型,即是OutputArrayOfArrays的原型:
class CV_EXPORTS _OutputArray : public_InputArray{ public: _OutputArray(); _OutputArray(Mat& m); template<typename _Tp> _OutputArray(vector<_Tp>& vec); template<typename _Tp> _OutputArray(vector<vector<_Tp>>& vec); _OutputArray(vector<Mat>& vec); template<typename _Tp> _OutputArray(vector<Mat_<_Tp>>& vec); template<typename _Tp> _OutputArray(Mat_<_Tp>& m); template<typename _Tp, int m, int n> _OutputArray(Matx<_Tp, m,n>& matx); template<typename _Tp> _OutputArray(_Tp* vec, int n); _OutputArray(gpu::GpuMat& d_mat); _OutputArray(ogl::Buffer& buf); _OutputArray(ogl::Texture2D& tex); _OutputArray(constMat& m); template<typename _Tp> _OutputArray(const vector<_Tp>&vec); template<typename _Tp> _OutputArray(constvector<vector<_Tp> >& vec); _OutputArray(const vector<Mat>& vec); template<typename _Tp> _OutputArray(const vector<Mat_<_Tp>>& vec); template<typename _Tp> _OutputArray(const Mat_<_Tp>& m); template<