c# - Emgu GetAverage 图像的黑色颜色
问题描述
我是 Emgu 简历的新手。我的目标是比较两张相同的照片,但亮度略有不同,并获得 ROI 的深色或暗点百分比。
我看到了 GetAverage 方法,但是如何通过指定颜色来获取图像的颜色百分比。例如黑色是 80%,白色是 20%。
GetAverage 方法中的 mask 参数是什么?
我阅读了文档,但我不明白。
我的想法是我将两张照片都更改为灰度并设置 ROI,然后得到平均值。我不知道这是获得目标的正确方法。
那么我该怎么做呢?
更新
下面是灰度的 ROI 图像。
- 左图平均强度:37.4879
- 右图平均强度:40.9773
我在正确的照片上添加了一些划痕。
- 左图平均强度:37.4879
- 右图平均强度:40.7638
为什么划痕照片强度低于没有划痕照片的强度。按理说,应该更大吧?因为它有更多的灰色,对吗?为什么?
或者
我加了scratch,意思是更黑,所以灰色减色?
解决方案
GetAverage 方法中的 mask 参数是什么?
mask
重载中的参数GetAverage(mask)
可以让你只根据官方文档找到被遮罩区域的平均颜色。
关于掩码的概念(与 ROI 的概念有关),它允许您仅分析或详细说明(取决于上下文)掩码为非零的图像的位置。我邀请您在这里深入探讨这一点。如果您发现文档不够清晰,请尝试了解蒙版在 Photoshop 中的工作原理,概念是相同的,您肯定会发现更多解释和更直观。
为什么划痕照片强度低于没有划痕照片的强度。按理说,应该更大吧?因为它有更多的灰色,对吗?为什么?
不,它不应该更严重。如文档所示,此处GetAverage()
返回具有原始图像结构的平均颜色(TColor
),Gray
(灰度)在这种情况下。
正如您在此处看到的,较深颜色的灰度值趋于0
,相反,白色对应于255
。因此,添加划痕意味着您的图像变暗。
如果您尝试应用GetAverage()
到具有不同颜色类型(Bgr
、Bgra
、Hsv
、Hls
、 ...)的图像,它将返回该类型颜色的平均值。
最后一件事,
我看到了 GetAverage 方法,但是如何通过指定颜色来获取图像的颜色百分比。例如黑色是 80%,白色是 20%。
你不能用这种方法。如上所述GetAverage()
返回给你一个Gray
颜色。我唯一可以建议的是,您可以手动将获得的结果转换为颜色百分比,如下所示:
private double ConvertToPercentage(double valueToConvert, int rangeStartAt, int rangeEndAt) {
return valueToConvert/(rangeEndAt - rangeStartAt) * 100;
}
显然,这段代码仅适用于单值颜色(例如,不是 rgb,它有 3 个值)。如果需要,您可以很容易地重新实现类似的东西。
推荐阅读
- windows - 如何从现有的 WSL bash 窗口启动新的 WSL bash 窗口
- django - 如何动态使用 Django widthratio 标签?
- angular - 跨域请求被阻止,发布请求 Angular 和 Spring
- angularjs - 从角度数据表过滤后,空值不再显示
- android - 如何维护单个活动的 startActivityForResult
- elasticsearch - 我应该如何过滤使用 Serilog.Sink.Elasticsearch 创建的日志信息?
- c++ - 如何赋值默认值和变量语句赋值
- html - 使用Angular 6限制文本框中第一个位置的空间
- python-3.x - 窗口没有响应?
- swift - 如何最初在 NavigationBar 中显示 SearchBar 但在用户向上滚动时仍将其隐藏?