【问题标题】:how detect rgb image format really is gray?如何检测 rgb 图像格式真的是灰色的?
【发布时间】:2016-08-09 14:49:43
【问题描述】:

我有带有 opencv c++ 的图像处理程序。 在我的程序中,两条预处理路径是针对 2 种灰度图像和彩色图像。 但有时我得到的图像是灰度级但以 RGB 格式存储意味着当外观图像为灰色但此图像有 3 个通道时。

如何检测 rgb 图像格式是真的彩色还是灰色?

【问题讨论】:

  • 由于灰色被定义为没有饱和度,您可以转换为具有 Saturation 分量的色彩空间(例如 HSL)并检查饱和度通道是否为零,或者它的最大值非常小。

标签: c++ opencv image-processing


【解决方案1】:

您可以检查像素并检查它们的 R、G 和 B 值是否每次都相同。

cv::Mat image;  // your image with type CV_8UC3
bool grayscale = true;
for(int i = 0; i < image.rows; i++) {
    cv::Vec3b* ptr = image.ptr<cv::Vec3b>(i);
    for(int j = 0; j < image.cols; j++) {
        if(!(ptr[j][0] == ptr[j][1] && ptr[j][0] == ptr[j][2])) {
            grayscale = false;
            break;
        }
    }
    if(!grayscale)
        break;
}

【讨论】:

    【解决方案2】:

    几乎所有的灰色都有red == green == blue。只需检查红色绿色和蓝色值是+10 or -10 就可以了。

    如果您希望获得特定形式的灰色,您可以查看this website 以查看可以形成的相关灰色颜色,或在 RGB 输入门户上自行试验。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2016-06-18
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多