【发布时间】: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