首页 > 解决方案 > Emgu GetAverage 图像的黑色颜色

问题描述

我是 Emgu 简历的新手。我的目标是比较两张相同的照片,但亮度略有不同,并获得 ROI 的深色或暗点百分比。

我看到了 GetAverage 方法,但是如何通过指定颜色来获取图像的颜色百分比。例如黑色是 80%,白色是 20%。

GetAverage 方法中的 mask 参数是什么?

我阅读了文档,但我不明白。

我的想法是我将两张照片都更改为灰度并设置 ROI,然后得到平均值。我不知道这是获得目标的正确方法。

那么我该怎么做呢?

更新

下面是灰度的 ROI 图像。

在此处输入图像描述

我在正确的照片上添加了一些划痕。

在此处输入图像描述

为什么划痕照片强度低于没有划痕照片的强度。按理说,应该更大吧?因为它有更多的灰色,对吗?为什么?

或者

我加了scratch,意思是更黑,所以灰色减色?

标签: c#opencvemgucv

解决方案


GetAverage 方法中的 mask 参数是什么?

mask重载中的参数GetAverage(mask)可以让你只根据官方文档找到被遮罩区域的平均颜色。

关于掩码的概念(与 ROI 的概念有关),它允许您仅分析或详细说明(取决于上下文)掩码为非零的图像的位置。我邀请您在这里深入探讨这一点。如果您发现文档不够清晰,请尝试了解蒙版在 Photoshop 中的工作原理,概念是相同的,您肯定会发现更多解释和更直观。

为什么划痕照片强度低于没有划痕照片的强度。按理说,应该更大吧?因为它有更多的灰色,对吗?为什么?

不,它不应该更严重。如文档所示,此处GetAverage()返回具有原始图像结构的平均颜色(TColor),Gray(灰度)在这种情况下。
正如您在此处看到的,较深颜色的灰度值趋于0,相反,白色对应于255。因此,添加划痕意味着您的图像变暗。
如果您尝试应用GetAverage()到具有不同颜色类型(BgrBgraHsvHls、 ...)的图像,它将返回该类型颜色的平均值。

最后一件事,

我看到了 GetAverage 方法,但是如何通过指定颜色来获取图像的颜色百分比。例如黑色是 80%,白色是 20%。

你不能用这种方法。如上所述GetAverage()返回给你一个Gray颜色。我唯一可以建议的是,您可以手动将获得的结果转换为颜色百分比,如下所示:

private double ConvertToPercentage(double valueToConvert, int rangeStartAt, int rangeEndAt) {
    return valueToConvert/(rangeEndAt - rangeStartAt) * 100;
}

显然,这段代码仅适用于单值颜色(例如,不是 rgb,它有 3 个值)。如果需要,您可以很容易地重新实现类似的东西。


推荐阅读