【问题标题】:Are HSV values stored as VSH in numpy array?HSV 值是否存储为 numpy 数组中的 VSH?
【发布时间】:2017-01-04 05:55:21
【问题描述】:

既然 RGB 被存储为 BGR ,那么在 HSV 的情况下也会发生同样的情况吗?

我正在制作一个项目,我从网络摄像头获取输入并将其转换为 HSV 颜色,以跟踪特定颜色的对象。

【问题讨论】:

  • 我认为我们需要更多的上下文。 RGB 何时存储为 BGR?
  • BGR 只是反映了遥感中常用的波长从最短到最长的顺序。哪个是对的?取决于你的纪律,使用是控制因素。
  • 不,订单是hsv。注意数据范围,h [0,179], s 和 v [0,255]
  • @Aditya:请您进一步描述您的问题。您是在加载普通图像并将其转换为 HSV,还是使用 OpenCv 将 HSV 格式的图像保存到磁盘。
  • @saurabheights 我正在将普通图像转换为 HSV 格式

标签: python opencv numpy colors


【解决方案1】:

没有。这是 HSV 模式。

阅读下面的代码并在示例图像上运行。

int main()
{
    // Load your Red colored image
    cv::Mat frame = imread("test.png");

    // Split each channel
    cv::Mat rgbChannels[3];
    cv::split(frame, rgbChannels);
    cv::imshow("RGB", frame);

    // Check value of your Red, Blue and Green Channel
    double minVal, maxVal;
    // Note: Blue is first channel
    cv::minMaxLoc(rgbChannels[0], &minVal, &maxVal);
    std::cout << "Blue: Min = " << minVal << ", Max = " << maxVal << std::endl;
    cv::minMaxLoc(rgbChannels[1], &minVal, &maxVal);
    std::cout << "Green: Min = " << minVal << ", Max = " << maxVal << std::endl;
    cv::minMaxLoc(rgbChannels[2], &minVal, &maxVal);
    std::cout << "Red: Min = " << minVal << ", Max = " << maxVal << std::endl;

    std::cout << "*******************************" << std::endl;

    cv::Mat hsv;
    cv::Mat hsvChannels[3];
    // Convert BGR image to HSV. Dont use CV_RGB2HSV.
    cv::cvtColor(frame, hsv, CV_BGR2HSV);

    // Split each channel
    cv::split(hsv, hsvChannels);

    // **Display HSV image: Note: When displaying opencv does not display image as Red image**
    // This is because imshow will just take first channel which is hue and treat it as Blue, second channel as 
    // Green, and last channel as Red.
    cv::imshow("HSV", hsv);
    cv::minMaxLoc(hsvChannels[0], &minVal, &maxVal);
    std::cout << "Hue: Min = " << minVal << ", Max = " << maxVal << std::endl;
    cv::minMaxLoc(hsvChannels[1], &minVal, &maxVal);
    std::cout << "Saturation: Min = " << minVal << ", Max = " << maxVal << std::endl;
    cv::minMaxLoc(hsvChannels[2], &minVal, &maxVal);
    std::cout << "Value: Min = " << minVal << ", Max = " << maxVal << std::endl;
    waitKey(0);
    return 0;
}

输出:-

Blue: Min = 36, Max = 36
Green: Min = 28, Max = 28
Red: Min = 237, Max = 237
*******************************
Hue: Min = 179, Max = 179
Saturation: Min = 225, Max = 225
Value: Min = 237, Max = 237

输出说明 使用这个tool,RGB 值(237、28、36)映射到 HSV(358、88.2、92.9)。由于 HUE 的范围从 0 到 359,因此该值跨越了 1 字节界限,仅允许 256 个值。 HUE 除以 2 范围为 opencv 中的 [0,179] 以使用更少的内存。色调值 358 除以 2 映射到 179,即第一个通道。此外,饱和度和值只是标准化为 0-255。因此,您可以看到饱和度映射到第二个通道,值映射到第三个通道。

【讨论】:

    【解决方案2】:

    没有。但是有适用于 RGB 值的功能。它以 HSV 格式存储在 numpy 数组中。 要查看此内容,请访问 Opencv 文档Opencv Documentation Color Conversion

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 2022-07-21
      • 1970-01-01
      • 2018-09-28
      • 2017-11-21
      相关资源
      最近更新 更多