我是Emgu简历的新手。我的目标是比较两张相同的照片,但亮度略有不同,并获得ROI的暗色或暗点百分比。
我看到了GetAverage方法,但是如何通过指定颜色来获取图像的颜色百分比。例如,黑色是80%,白色是20%。
GetAverage方法中的mask参数是什么?
我阅读了文档,但我听不懂。
我的想法是我将两张照片都更改为灰度并设置ROI,然后获得平均值。我不知道它是达到目标的正确方法。
那我该怎么做?
更新
下面是灰度的ROI图片。
我在正确的照片上添加了一些划痕。
为什么刮擦照片的强度要比不使用刮擦照片的强度低。对了,应该更大吧?因为它有更多的灰色吧?为什么?
或
我添加了草稿,这意味着更多的黑色,所以减少了灰色吗?
答案 0 :(得分:1)
GetAverage方法中的mask参数是什么?
重载的mask
中的GetAverage(mask)
参数仅允许您根据official documentation来找到被遮罩区域的平均颜色。
关于遮罩的概念(与ROI的概念有关),它允许您仅分析或制作(取决于上下文)遮罩为非零的图像位置。我邀请您进一步了解此here。如果您发现文档不够清楚,请尝试了解蒙版在Photoshop中的工作原理,该概念是相同的,并且您肯定会发现更多的解释和更直观的信息。
为什么刮擦照片的强度要比不使用刮擦照片的强度低。通过 对,应该更大吧?因为它有更多的灰色 对?为什么?
不,它不应该是更好的选择。如文档所示,在这种情况下,GetAverage()
将返回具有原始图像结构的平均颜色(TColor
,Gray
(灰度)。
如您所见,here的深色帐篷的灰度值为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个值的颜色)。您可以很容易地重新实现这样的事情,以备不时之需。