使用opencV从RGB图像中提取一个通道图像

You*_*riD 6 qt opencv

我正在使用QT和OpenCV,我有这个需要提取的方块,但我需要使用从RGB转换到一个通道(基本上是RED).任何建议都将受到欢迎,请随时咨询哪些功能使用.提前致谢.

dan*_*ain 11

我认为cvSplit你正在寻找(docs).例如,您可以使用它将RGB分割为R,G和B:

/* assuming src is your source image */
CvSize s = cvSize(src->width, src->height);
int d = src->depth;
IplImage* R = cvCreateImage(s, d, 1);
IplImage* G = cvCreateImage(s, d, 1);
IplImage* B = cvCreateImage(s, d, 1);
cvSplit(src, R, G, B, null);
Run Code Online (Sandbox Code Playgroud)

请注意,您需要注意订购; 确保原始图像实际上是按R,G,B排序的(有一个很好的机会它是B,G,R).


Una*_*dra 10

由于这是标记qt我会给出一个C++答案.

    // Create Windows
    namedWindow("Red",1);
    namedWindow("Green",1);
    namedWindow("Blue",1);

    // Create Matrices (make sure there is an image in input!)
    Mat input;
    Mat channel[3];

    // The actual splitting.
    split(input, channel);

    // Display
    imshow("Blue", channel[0]);
    imshow("Green", channel[1]);
    imshow("Red", channel[2]);
Run Code Online (Sandbox Code Playgroud)

在OpenCV 2.4.5上测试过


Nik*_*kov 7

另一种方法是使用extractChannel

cv::Mat channel;
//image is already loaded
cv::extractChannel(image, channel, 2);
Run Code Online (Sandbox Code Playgroud)

这将从中提取第三个通道image并将结果保存在channel. 也可以使用extractImageCOI和提取特定频道mixChannels