C# Emgu获取图像黑色的平均颜色

C# Emgu获取图像黑色的平均颜色,c#,opencv,emgucv,C#,Opencv,Emgucv,我是Emgu cv的新手。我的目标是比较两张照片,它们是相同的照片,但亮度略有不同,并获得感兴趣区域的深色或暗点百分比 我见过GetAverage方法,但如何通过指定颜色获得图像的颜色百分比呢。例如黑色是80%,白色是20% GetAverage方法中的掩码参数是什么 我读了文档,但不明白 我的想法是将两张照片都改为灰度,设置ROI,然后得到平均值。我不知道这是实现目标的正确方法 那我该怎么做呢 更新 下面是灰度的ROI图像 左照片平均强度:37.4879 右图平均强度:40.9773 我

我是Emgu cv的新手。我的目标是比较两张照片,它们是相同的照片,但亮度略有不同,并获得感兴趣区域的深色或暗点百分比

我见过GetAverage方法,但如何通过指定颜色获得图像的颜色百分比呢。例如黑色是80%,白色是20%

GetAverage方法中的掩码参数是什么

我读了文档,但不明白

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

那我该怎么做呢

更新

下面是灰度的ROI图像

  • 左照片平均强度:37.4879
  • 右图平均强度:40.9773
我在右边的照片上加了一些划痕

  • 左照片平均强度:37.4879
  • 右照片平均强度: 40.7638
为什么划痕照片的强度比没有划痕照片的低。按理说,它应该更大,对吗?因为它有更多的灰色,对吗?为什么?

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

GetAverage方法中的掩码参数是什么

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

关于遮罩的概念(与ROI的概念相关),它允许您仅分析或详细说明(取决于上下文)遮罩非零的图像位置。我请你们对此进行深入讨论。如果您发现文档不够清晰,请尝试了解Photoshop中的遮罩是如何工作的,概念是相同的,您肯定会找到更多的解释和更直观的方法

为什么划痕照片的强度比没有划痕照片的低。通过 对,应该更大,对吧??因为它有更多的灰色 正确的?为什么?

不,不应该是格拉瑟。如文档所示,
GetAverage()
返回原始图像结构的平均颜色(
TColor
),
Gray
(灰度)。
正如您可以看到的,深色帐篷的灰度值为
0
,相反,白色对应于
255
。 因此,添加划痕意味着您的图像变暗。
如果您尝试将
GetAverage()
应用于具有不同颜色类型的图像(
Bgr
Bgra
Hsv
Hls
,…),它将返回该类型的平均颜色。

最后一件事

我看到了GetAverage方法,但我怎样才能得到图像的颜色百分比 指定颜色。例如黑色是80%,白色是20%

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

private double ConvertToPercentage(double valueToConvert, int rangeStartAt, int rangeEndAt) {
    return valueToConvert/(rangeEndAt - rangeStartAt) * 100;
}
显然,这段代码只适用于单值颜色(例如,不是rgb,它有3个值)。如果需要,您可以很容易地重新实现类似的东西