以下代码为什么不显示图像的红色通道?

时间:2018-06-25 19:25:56

标签: c++ opencv

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
    Mat src = imread("image.png", 1);
    namedWindow("src", 1); 
    imshow("src", src);

    vector<Mat> rgbChannels(3);
    split(src, rgbChannels);

    namedWindow("R", 1); 
    imshow("R", rgbChannels[2]);

    waitKey(0);
    return 0;
}

enter image description here

我期望的是以下内容:

enter image description here

上面的代码为什么不显示红色通道?为什么显示灰度图像?

如果将图像分为3个通道,则每个矩阵应显示r,g和b的颜色之一。不是吗?

1 个答案:

答案 0 :(得分:4)

您的代码是正确的;但是,OpenCV将通道显示为灰度。 Mat不保留有关数据“来源”的信息。换句话说,它不知道它是红色通道,因此当您调用imshow时,它将显示为单通道图像。

您所能做的就是用2个零位通道和一个您想要可视化的通道构建一个空图像。