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

时间:2012-01-28 15:08:42

标签: qt opencv

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

4 个答案:

答案 0 :(得分: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);

请注意,您需要注意订购;确保原始图像实际上按R,G,B顺序排列(它有可能是B,G,R)。

答案 1 :(得分: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]);

在OpenCV 2.4.5上测试

答案 2 :(得分:2)

据我所知,

cvtColor(src, bwsrc, CV_RGB2GRAY);

可以这样做,其中src是多通道源图像,第三个参数表示目标中的通道数。因此,您可以在OpenCV中执行此操作并在Qt界面上显示图像。

另一方面,您可以使用适当的split()方法将通道拆分为单独的单通道数组。

http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#split

答案 3 :(得分:0)

另一种方法是使用extractChannel

cv::Mat channel;
//image is already loaded
cv::extractChannel(image, channel, 2);

这将从image中提取第三个通道,并将结果保存在channel中。也可以使用extractImageCOImixChannels提取特定频道。