Emgu GetAverage图像的黑色颜色

时间:2020-09-03 08:18:24

标签: c# opencv emgucv

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

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

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

我阅读了文档,但我听不懂。

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

那我该怎么做?

更新

下面是灰度的ROI图片。

AWS Cost Explorer

  • 左图平均强度:37.4879
  • 右图平均强度:40.9773

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

enter image description here

  • 左图平均强度:37.4879
  • 右图平均强度: 40.7638

为什么刮擦照片的强度要比不使用刮擦照片的强度低。对了,应该更大吧?因为它有更多的灰色吧?为什么?

我添加了草稿,这意味着更多的黑色,所以减少了灰色吗?

1 个答案:

答案 0 :(得分:1)

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

重载的mask中的GetAverage(mask)参数仅允许您根据official documentation来找到被遮罩区域的平均颜色。

关于遮罩的概念(与ROI的概念有关),它允许您仅分析或制作(取决于上下文)遮罩为非零的图像位置。我邀请您进一步了解此here。如果您发现文档不够清楚,请尝试了解蒙版在Photoshop中的工作原理,该概念是相同的,并且您肯定会发现更多的解释和更直观的信息。

为什么刮擦照片的强度要比不使用刮擦照片的强度低。通过 对,应该更大吧?因为它有更多的灰色 对?为什么?

不,它不应该是更好的选择。如文档所示,在这种情况下,GetAverage()将返回具有原始图像结构的平均颜色(TColorGray(灰度)。
如您所见,here的深色帐篷的灰度值为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个值的颜色)。您可以很容易地重新实现这样的事情,以备不时之需。