如何传递 RGB 信息来对图像进行阈值处理

Posted

技术标签:

【中文标题】如何传递 RGB 信息来对图像进行阈值处理【英文标题】:How to pass RGB information to do Thresholding of an image 【发布时间】:2019-06-06 12:03:47 【问题描述】:

我正在使用 UnrealCV 从 Unreal Engine 获取遮罩图像和 RGB 图像。在这里,我还使用 UnrealCV 从蒙版图像中获取对象的颜色信息(R、G、B)。现在,我想知道如何将这些 RGB 信息传递给 OpenCV 进行阈值处理。

我现在正在做这些事情,将蒙版图像转换为灰度图像,然后进行阈值处理。但我不想这样做。我已经检查了this answer,但这里使用了我也不想做的图像范围。与蒙版图像一样,每个对象都有其独特的颜色信息,所以我只想通过从蒙版图像发送所需对象的 RGB 信息来更具体,然后想告诉 OpenCV 对我拥有的颜色进行阈值处理发送到 OpenCV 阈值函数。

用于获取RGB信息的代码是--

get_mask_color= client.request('vget /object/object_name/color')

它会给蒙版颜色,然后我想将它传递给 OpenCV 用于阈值处理。

我希望它会像现在对灰度图像一样进行阈值处理,然后我将使用阈值图像进行轮廓操作。

【问题讨论】:

您的问题非常难以理解。如果您显示遮罩图像的形状和内容、您想要阈值的图像的形状和内容以及您期望的结果,这可能会有所帮助。 好的,@MarkSetchell。 this is one of the mask images 而RGB 就是这个。我使用提到的 UnrealCv 命令从蒙版图像中获取方形框的 RGB 信息。现在我想将 RGB 信息传递给 OpenCV 的阈值函数。就这样。我只想知道传递 RGB 信息以进行阈值处理的过程。我再次重复我不想将我的蒙版图像转换为灰度图像或任何其他格式。 我还是不明白。您的面具似乎有 3 种颜色 - 黑色、桃色和淡紫色。还有一张以天空为背景的斜坡上的一些洗碗机平板电脑的照片。接下来应该发生什么?为什么不想使用任何灰度? 啊好的,我正在清除视图。有3个轮廓不会出现。我知道虚幻引擎的方盒子的名字。所以,我将使用名称来获取颜色信息,它是完全独一无二的。看看这个命令get_mask_color= client.request('vget /object/object_name/color') 它只会给我方框的颜色。然后我想传达这个 RGB 值来进行阈值处理。我不想使用灰度,因为有时在将我想要的对象与背景混合后转换为灰色后,有时会从蒙版图像中使用灰度,然后很难进行阈值处理 > 寻找轮廓。 不清楚为什么知道盒子的名称很重要,为什么它来自虚幻引擎很重要,以及为什么某些东西是独一无二的很重要。你想做什么?请你造个简单的句子好吗? “口罩到处都是黑色的,我想做XYZ。口罩到处都是桃色,我想做ABC……” 【参考方案1】:

在灰度图像中,阈值处理将暗像素与亮像素分开,即将灰度范围分成两个子区间。这是基于(天真的)前提,即感兴趣的对象由最亮(或最暗)的颜色组成。

更合乎逻辑的方法是考虑由两个阈值(平均颜色 ± 最大变化)定义的子区间内的像素值。如果感兴趣的对象有几种不同的颜色,每种颜色都对应一个灰度值区间,这些值会重叠或不重叠。实际上,这效果不佳,因为场景中的许多其他特征可能具有相同的灰度。

在颜色的情况下,事情就更复杂了。统一的颜色定义了 RGB 空间中的单个点,当您考虑到变化时,您会观察到具有特定形状的整个体积。如果幸运的话,形状是一个紧凑的椭圆体;如果有阴影和/或阴影效果,则该形状可以是锥形的,并且可以扩展。

同样,当对象由几种颜色组成时,体积可以由几个重叠或孤立的形状组成。

要处理给定的应用程序,您必须了解与您的对象对应的 RGB 云的形状,并找到合适的几何描述。作为第一个近似值,您可以使用具有给定中心和范围的立方体或球体。

【讨论】:

以上是关于如何传递 RGB 信息来对图像进行阈值处理的主要内容,如果未能解决你的问题,请参考以下文章

图像的二值化处理的阈值是指啥?求vc下的代码实现!?

matlab 图像处理 二值化

OpenCV中的图像阈值处理算法

如何利用matlab对图像进行处理,效果如图所示

Matlab中 如何导入png图片 并进行中值滤波(3*3) 然后进行二值化处理阈值为128 如果东西好还可以进行追分

自适应阈值处理