如何使用 C++ 在 OpenCV 中将图像分割成不同的通道?

opencvc++server side programmingprogramming

RGB 图像有三个通道:红、绿、蓝。红、绿、蓝通道代表图像的颜色空间称为 RGB 颜色空间。在 OpenCV 中,使用 BGR 序列代替 RGB。这意味着第一个通道为蓝色,第二个通道为绿色,第三个通道为红色。要将 RGB 图像分割成不同的通道,我们需要定义一个包含 3 个通道的矩阵。我们使用 "Mat different_Channels[3]" 来定义一个三通道矩阵。

接下来,我们使用 OpenCV 的"split()"函数分割加载的图像。此函数的格式为 "split(源矩阵, 目标矩阵)"。此函数将源矩阵的图像拆分成图像的各个通道,并将它们保存在目标矩阵中。此行代码执行的是 - "split(myImage, different_Channels);"

split 函数已将蓝色、绿色和红色通道加载到"different_channels"矩阵中。使用以下代码,我们将存储在不同通道中的图像加载到新的矩阵中。

Mat b = different_Channels[0];//加载蓝色通道//
Mat g = different_Channels[1];//加载绿色通道//
Mat r = different_Channels[2];//加载红色通道//

最后,我们使用以下代码分别显示每个通道:−

imshow("Blue Channel",b);//显示蓝色通道//
imshow("Green Channel",g);//显示绿色通道//
imshow("Red Channel",r);//显示红色通道//

这就是我们将图像拆分成各个通道的方法。

以下程序将 RGB 图像拆分为蓝色、绿色和红色通道。

示例

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc,const char** argv) {
   Mat myImage;//声明一个用于加载图像的矩阵//
   Mat different_Channels[3];//声明一个包含三个通道的矩阵//  
   myImage= imread("RGB.png");//将图像加载到 myImage 矩阵中//
   split(myImage, different_Channels);//将图像拆分成 3 个不同的通道//  
   Mat b = different_Channels[0];//加载蓝色通道//
   Mat g = different_Channels[1];//加载绿色通道//
   Mat r = different_Channels[2];//加载红色通道//  
   imshow(&"Blue Channel",b);//显示蓝色通道//
   imshow(&"Green Channel",g);//显示绿色通道//
   imshow(&"Red Channel",r);//显示红色通道//
   imshow(&"Actual_Image", myImage);//显示实际图像//
   waitKey(0);//等待按键
   destroyAllWindows();//关闭所有窗口//
   return 0;
}

输出


相关文章