【问题标题】:extract one channel image from RGB image with opencV使用opencV从RGB图像中提取一个通道图像
【发布时间】:2012-02-21 04:59:19
【问题描述】:

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

【问题讨论】:

标签: qt opencv


【解决方案1】:

我认为 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)。

【讨论】:

  • 这可能是提问者搜索的内容。
【解决方案2】:

由于这被标记为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 上测试

【讨论】:

    【解决方案3】:

    另一种方法是使用extractChannel:

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

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

    【讨论】:

      【解决方案4】:

      据我所知,

      cvtColor(src, bwsrc, CV_RGB2GRAY);
      

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        相关资源
        最近更新 更多