【问题标题】:How to get OpenCV HSV value from hexadecimal color value in C++?如何从 C++ 中的十六进制颜色值获取 OpenCV HSV 值?
【发布时间】:2017-04-22 07:57:44
【问题描述】:

我想检测 OpenCV 中的白色/灰色对象,因此我需要将 #B4BAB8 转换为 OpenCV HSV 值。试了很多东西,就是不知道怎么计算这个颜色的lowerb和upperb..#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);

【问题讨论】:

  • #B4BAB8 - 适用于 RGB、BGR、HSL、HSV/HSB、CMYK、CIE-LAB 可能是其他颜色的 sheme 图像?无论如何检查colorizer.orgdocs.opencv.org/2.4/modules/imgproc/doc/…它可能对你有用。
  • 我不明白你的意思
  • 我的意思是十六进制值 B4BAB8 只是一个数字。它可能是 R=B4 , G= BA, B=B8 或 H=B4, S=BA, V=B8 或 L=B4, a=BA, B=BA 或任何其他色彩空间分量,甚至是非常 HDR灰度值。没有像“十六进制”这样的颜色空间,它只是一般的数字表示形式。
  • #b4bab8 颜色 RGB 值为 (180,186,184)。
  • 我需要将其转换为 lowerb 和 upperb 以检测我的对象。如何使用 OpenCV 做到这一点?

标签: c++ opencv colors hex hsv


【解决方案1】:

我在 OpenCV 中处理色彩空间时遇到了这个问题。正如评论中提到的@Andrey Smorodov,值 #b4bab8 是一个十六进制,可以在任何颜色空间中解释。如果您在提到 180,186,184 时具有 RGB 值,请按照 this 了解 OpenCV 在使用 Imgproc.cvtcolor() 时使用的转换。转换与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)。你可以简单地用你想要的任何类型的颜色(180,186,184)制作一个空的“RGB”图像,并使用 cvtcolor 来更改 BGR2HSV(注意:OpenCV 将所有 RGB 图像加载为 BGR)并检查 HSV 颜色空间中的值是什么。 如果有帮助,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2012-11-04
    • 2013-06-07
    • 2012-07-29
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多