【问题标题】:openCV RGB2Gray with custom weights具有自定义权重的 openCV RGB2Gray
【发布时间】:2018-01-20 09:08:16
【问题描述】:

颜色转灰度算法在 cvtColor() 文档中说明。 (搜索 RGB2GRAY)。

Y = 0.299 R + 0.587 G + 0.114 B

我正在使用

    cv::Mat i_test_base;
    cv::cvtColor(white_balance_image, i_test_base, CV_RGB2GRAY);
    cv::imshow("cvtColor", i_test_base);
    cv::waitKey(0);

我正在使用 Macbeth 图表,它在检测时可能会导致信号电平过低,例如蓝色补丁。仅使用通道之间的总和或 RGB 值的最大值很可能会更好。

我尝试了类似的东西

cv::transform(white_balance_image, i_test_base, cv::Matx13f(1, 1, 1));
cv::imshow("transform", i_test_base);
cv::waitKey(0);

但这不起作用,我得到一张白色的图像。 我需要缩放或类似的东西吗?

【问题讨论】:

  • 你能发布一个示例输入图像吗?当前权重最终会饱和 2/3 的输入颜色。也许使用 HSV 图像的 V 通道可能会产生更好的结果?
  • @DanMašek 我可以发布输入图像,但这只是一个普通的麦克白图表,没什么特别的。只是想知道是否有办法放置不同的权重。
  • 如果您转换为浮点数,您可以使用图像而无需担心正常uint8 值的饱和/溢出。

标签: c++ opencv image-processing


【解决方案1】:

在您的 cv::transform 中,确保权重总和为 1(或更小)以避免饱和。

如果你使用

cv::transform(white_balance_image, i_test_base, cv::Matx13f(0.114, 0.587, 0.299));

在 BGR 图像上,您应该得到与 BGR2GRAY 相同的结果。如果你改用(1/3.0, 1/3.0, 1/3.0),你应该得到3个通道的平均值。根据自己的喜好调整。

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 2018-08-06
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2021-12-15
    • 2015-01-12
    相关资源
    最近更新 更多