如何从 C++ 中的十六进制颜色值获取 OpenCV HSV 值?

How to get OpenCV HSV value from hexadecimal color value in C++?

我想在 OpenCV 中检测 white/grey 对象,因此我需要将 #B4BAB8 转换为 OpenCV HSV 值。我尝试了很多东西,但我不知道如何计算这种颜色的下限和上限。#B4BAB8 是对象的颜色。

我应该在 cv::inRange(frmHsv, cv::Scalar([WHAT VALUE?]), cv::Scalar([WHAT VALUE?]), rangeRes); 中使用什么值?

 cv::Mat frmHsv;
 cv::cvtColor(blur, frmHsv, CV_BGR2HSV);
 // <<<<< HSV conversion

 // >>>>> Color Thresholding
 // Note: change parameters for different colors
 cv::Mat rangeRes = cv::Mat::zeros(rgbmat.size(), CV_8UC1);
 cv::inRange(frmHsv, cv::Scalar([WHAT VALUE?]), cv::Scalar([WHAT VALUE?]), rangeRes);

当我在 OpenCV 中使用颜色 spaces 时,我 运行 进入了这个。正如@Andrey Smorodov 在评论中提到的,值#b4bab8 是一个十六进制,可以用任何颜色 space 解释。如果您提到的 RGB 值是 180,186,184,请遵循 this for the conversion OpenCV uses when using Imgproc.cvtcolor(). The conversion is different from ones on this,因此这适用于 RGB 到 BGR,但不适用于 BGR2HSV。另外,请确保您进行的转换与矩阵的正确类型相对应。

例如,对于 CV_32FC3 类型的矩阵, RGB (245,172,127) 将是 LUV(2.55*76.3, 255*(134+53.3)/358.0, 255 * (39.5 +140) / 262.0)。您可以简单地制作一个空的 "RGB" 图像,其颜色 (180,186,184) 为您想要的任何类型,并使用 cvtcolor 更改 BGR2HSV(注意:OpenCV 将所有 RGB 图像加载为 BGR)并检查 HSV color [=17 中的值=] 是。 如果有帮助,请告诉我!