如何使用 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; }