背景
我在做瑕疵检测的时候,通过计算瑕疵区域的个数(count_obj())是否为0,来判断是否有瑕疵,如果不为0,那边我就会在图片上标记这个瑕疵的位置!
但是有一次我发现明明没有瑕疵,却在图片的左上角标记了一个瑕疵。
发现问题
然后我调试发现,当一个区域为空时,他的个数(count_obj())居然时1!
根据上下文,我先分析一下!
difference (RegionBlackOpening, SelectedRegions2, RegionDifference1)
RegionBlackOpening 本身时有值的,SelectedRegions2其实是和RegionBlackOpening是同一块区域。
两个相同的区域相减当然得到了一个空的区域!所以这里的意思就是,区域是空的,但是空的区域也是区域,所以计数是1! 所以,一个空的区域,却被硬生生标记,所以就出现在了图片的左上角0,0的位置
问题解决
所以,判断一个区域是否为空,不能判断他的个数,而应该判断他的面积。
如果面积是0,那么这个区域就是空!这里给一个C#的Demo。
/// <summary>
/// 判断区域是否为空
/// </summary>
/// <returns></returns>
bool RegionIsEmpty(HObject region)
{
HTuple area;
HOperatorSet.AreaCenter(region, out area, out _, out _);
if (area == 0) return true;
else return false;
}