c++ - 为什么以下代码不显示图像的红色 channel ?

标签 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

为什么上面的代码没有显示红色 channel ?为什么它显示灰度图像?

如果图像被分成3个 channel ,每个矩阵应显示r、g和b颜色之一。不是这样吗?

最佳答案

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

您可以做的是构建一个具有 2 个归零 channel 和您想要可视化的 channel 的空图像。

关于c++ - 为什么以下代码不显示图像的红色 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030592/

相关文章:

c++ - 添加两个 LPCWSTR 变量

c++ - OpenCV 将 ROI 外的像素设置为 ROI 内最近的像素值

opencv - 如何使用 opencv.js 中的 cv.goodFeaturesToTrack?

python - 如何使用 Opencv 2.4 将 python numpy 数组转换为 RGB 图像?

V4l2 上的 OpenCV 输出

c++ - Boost - 在服务器关闭套接字上为新客户端 fork

c++ - 在 Windows 中部署 Qt 应用程序

c++ - 我可以从调试二进制文件重建 C++ 源代码吗?

c++ - "filter"C++ 中的高阶函数

c++ - OpenCV--如何从低质量的灰度图像中获得更好的手部轮廓?