【问题标题】:Converting single pixel from RGB to LAB with OpenCV (C++)使用 OpenCV (C++) 将单个像素从 RGB 转换为 LAB
【发布时间】:2023-02-14 22:14:31
【问题描述】:

我正在尝试使用 OpenCV 将 RGB 值转换为 LAB 颜色空间。在做一些研究时,我发现有人有类似的目标here,并试图复制这种方法。

经过一番折腾后,我能够编译并运行以下代码:

int main(){
    int r_a = 168, g_a = 93, b_a = 201, r_b = 60, g_b = 117, b_b = 59;

    cv::Mat3f rgb_a (cv::Vec3f(r_a, g_a, b_a));
    cv::Mat3f rgb_b (cv::Vec3f(r_b, g_b, b_b));
    cv::Mat3f lab_a;
    cv::Mat3f lab_b;

    cv::cvtColor(rgb_a,lab_a,cv::COLOR_RGB2Lab);
    cv::cvtColor(rgb_b,lab_b,cv::COLOR_RGB2Lab);

    std::cerr << ">> rgb_a = " << rgb_a << "\n";
    std::cerr << ">> rgb_b = " << rgb_b << "\n";
    std::cerr << ">> lab_a = " << lab_a << "\n";
    std::cerr << ">> lab_b = " << lab_b << "\n";

    return 0;
}

当我运行它时,两个 LAB 值都计算为 [100, 0, 0]

经过更多浏览后,我发现其他人在 python 中使用 OpenCV 时遇到了类似的问题,请参阅question

我能够在 Python 中复制这个有效的解决方案,但我仍然无法找到 C++ 的修复程序。

关于如何解决这个问题的任何想法?这是矩阵形状问题吗?我非常不熟悉 C++ 中 OpenCV 的确切图像格式。

【问题讨论】:

  • 您使用Vec3f(和Mat3f),即包含浮点数的向量。在这种情况下,您必须将值缩放到[0,1] 范围内。或者你使用一个向量字节。
  • @M.Spiller 就是这样!我发布了一个答案,以防其他人遇到同样的问题。非常感谢!

标签: c++ opencv computer-vision rgb cielab


【解决方案1】:

在这里发布答案以防将来有人遇到同样的问题。

作为@M。 Spiller 指出我需要缩放我的向量。

我将每个值除以 255.0,然后转换能够正确执行!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-04
    • 2014-05-02
    • 2013-01-12
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2018-07-06
    • 2018-09-28
    相关资源
    最近更新 更多