代码之家  ›  专栏  ›  技术社区  ›  user366312

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

  •  2
  • user366312  · 技术社区  · 7 年前
    #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 回复  |  直到 7 年前
        1
  •  4
  •   Acorn    7 年前

    您的代码是正确的;然而,OpenCV正在将通道显示为灰度级。 Mat 不保留有关数据来自“何处”的信息。换句话说,它不知道它是一个红色通道,所以当你打电话的时候 imshow ,它将其显示为单通道图像。

    你能做的就是用两个零通道和你想可视化的通道建立一个空图像。