【问题标题】:Unable to split RGB channels无法拆分 RGB 通道
【发布时间】:2017-02-21 16:16:39
【问题描述】:

在 Windows 上使用 OpenCV 3.2.0,我试图将图像拆分为其组件通道。我使用 MS Paint(另存为 24 位 BMP)创建了源图像文件,并将每个对象设置为纯色。从结果中可以看出,每个通道都包含除该通道的数据之外的所有内容。我很困惑。如何仅获取绿色图像中的绿色数据,等等?我正在使用以下代码:

#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <string>
#include <cstdlib>
#include "opencv2\opencv.hpp"

using namespace std;
using namespace cv;

const string    source_window = "Source";
const string    red_window = "Red";
const string    green_window = "Green";
const string    blue_window = "Blue";

int main (int Argc, char** Argv)
    {
    Mat         src = imread ("Test.bmp");
    vector<Mat> rgb;

    namedWindow (source_window, WINDOW_AUTOSIZE);
    namedWindow (red_window, WINDOW_AUTOSIZE);
    namedWindow (green_window, WINDOW_AUTOSIZE);
    namedWindow (blue_window, WINDOW_AUTOSIZE);

    imshow (source_window, src);
    cv::split (src, rgb);
    imshow (red_window, rgb [2]);
    imshow (green_window, rgb [1]);
    imshow (blue_window, rgb [0]);

    waitKey (0);
    }

Results

【问题讨论】:

    标签: opencv


    【解决方案1】:

    这就是它应该的样子。考虑一下:

    • RGB 中的白色:255、255、255
    • RGB 中的红色:255, 0, 0
    • RGB 中的绿色:0、255、0
    • RGB 中的蓝色:0、0、255

    如果将图像拆分为通道,您将无法在红色通道中看到白色背景上的红色对象(因为对象和背景的值都是 255),其他通道也是如此。

    要使您的示例按预期工作,您应该用黑色填充背景。这样每个通道将“包含”仅对应的图形。

    【讨论】:

    • 我没有设置背景为白色,为什么是白色的?在红色窗口中,为什么我没有看到黑色背景和白色圆圈?
    • 在您的源图像上,背景是白色的,这就是我所指的。您在红色窗口中看不到黑色背景,因为白色背景红色通道的强度为 255
    • 啊,我明白了。谢谢。我编辑了源图像以将背景设置为黑色,现在我看到了我的期望。谢谢!
    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2021-05-12
    相关资源
    最近更新 更多