在处理图像的过程中,经常用到三通道与单通道图像相互转换。
首先需要知道:OpenCV中存储三通道图像具体数据的方式是BGR BGR BGR………
具体实现:
cv::Mat SrcMat = cv::imread("1.jpg",1); // 1.jpg为三通道图像
std::vector<cv::Mat>SrcMatpart(SrcMat.channels()); //生成与通道数数目相等的图像容器
cv::split(SrcMat,SrcMatpart); //分解与通道数数目相等的图像容器
cv::Mat MergeMat;
cv::merge(SrcMatpart,MergeMat); //合成与通道数数目相等的图像容器
详细分析, SrcMat被分为SrcMatpart[0]、 SrcMatpart[1]、SrcMatpart[2]三部分。
SrcMatpart[0]存储B颜色分量,SrcMatpart[1]存储G颜色分量,SrcMatpart[2] 存储R颜色分量。
MergeMat为合成后BGR分量后的图片。
SrcMat数据:53 1d 3b 58 20 3d 5c 22 3f 5f 24 40 61 27 40 61 27 40 5d 27 3e 5e 283f 5d 26 3f 5e 27 40 5d 26 41 5c 25 40 5f 28 43 60 29 42
SrcMatpart[0]:53 58 5c 5f 61 61 5d 5e 5d 5e 5d 5c 5f 60……….
SrcMatpart[1]:1d 20 22 24 27 27 27 28 26 27 26 25 28 29…………..
SrcMatpart[2]:3b 3d 3f 40 40 40 3e 3f 3f 40 41 40 43 42 …………..
MergeMat数据: 53 1d 3b 58 20 3d 5c 22 3f 5f 24 40 61 27 40 61 27 40 5d 27 3e 5e28 3f 5d 26 3f 5e 27 40 5d 26 41 5c 25 40 5f 28 43 60 29 42
对彩色图像来说,三通道中数据不同,分别表示颜色分量。对黑白图像来说,三个通道数据完全相同。
建议不再使用IplImage结构类型描述图像。