#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;
}
。
我期望的是以下内容:
上面的代码为什么不显示红色通道?为什么显示灰度图像?
如果将图像分为3个通道,则每个矩阵应显示r,g和b的颜色之一。不是吗?
答案 0 :(得分:4)
您的代码是正确的;但是,OpenCV将通道显示为灰度。 Mat
不保留有关数据“来源”的信息。换句话说,它不知道它是红色通道,因此当您调用imshow
时,它将显示为单通道图像。
您所能做的就是用2个零位通道和一个您想要可视化的通道构建一个空图像。