从直方图opencv的峰中获取色调值

时间:2019-05-13 18:28:15

标签: c++ opencv image-processing histogram

我正在尝试使用检测矩形的颜色信息。我的一些矩形重叠且具有多色。我找到了一种使用色相值检测这些矩形的解决方案。我正在用颜色的色相值检查inRange

  • 橙色0-22
  • 黄色22- 38
  • 绿色38-75
  • 蓝色75-130
  • 紫罗兰色130-160
  • 红色160-179

,但是我不知道确切的颜色是什么。例如,在一个图像中,矩形可以是橙色,红色,蓝色,而在另一图像中,矩形可以是其他颜色。

我试图查看直方图,但是我的背景不仅是白色或黑色。因此,直方图令人困惑。

如果您给我一些有关如何解决此问题的想法,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用蛮力方法,在其中尝试所有颜色范围,然后使用findcontours(example)来查看是否可以找到可能是矩形的轮廓。如果背景非常嘈杂,您可以为轮廓使用最小尺寸  (contourArea)。您也可以通过将轮廓区域除以solidity的区域来检查minAreaRect,矩形(具有良好检测能力)的结果应接近1。

这是否可行取决于几个因素,重叠的矩形会很快破坏它。

答案 1 :(得分:0)

因此,如果我理解正确,您有各种各样的图像,每个图像都包含多个矩形,这些矩形可以是多种不同的颜色,并且图像的背景不均匀,因此您尝试将使用直方图的矩形?

使用直方图进行图像分割最适合具有均匀背景的灰度图像,因此,在看到直方图中的窥视点时,您便知道要分割的对象的主要强度。该方法无法很好地转换为您的应用程序,因为您尝试分割的形状在阴影中是不均匀的,没有看到示例图像,我可能会说这行不通,但是您也许可以摆脱这种情况如果矩形的阴影变化相对相似...基本上,如果您的矩形为15-30,则可能没问题,但是如果矩形的范围为20-100,您将不走运,背景的变化。

如果背景和矩形具有非常清晰的边界,并且背景颜色非常平滑地过渡,则您可能可以避开背景上生长的某种区域以获取所有背景像素的列表然后将其设置为黑色或其他以便更好地分析前景中的矩形,但是我只能根据您在帖子中提供的信息进行推测