“名不副实”的inRange函数

前天在改写halcon代码的时候,遇到threshold函数:

threshold(Image : Region : MinGray, MaxGray : )

image:输入的图像;
Region:二值化后的结果;
MinGray:门限值下限;
MaxGray :门限值上限;
threshold函数的意义非常简单:


图片1.png

我第一个想法就是在opencv中的threshold函数寻找对应的阈值类型Type(原谅我学艺不精)。但是并没有找到支持自定义左右区间的阈值类型,经过一番查找,发现inRange函数完美契合这个功能:

cv::inRange(InputArray  src,
        InputArray  lowerb,
        InputArray  upperb,
        OutputArray     dst
        )

src:输入的图像
lowerb:阈值下限
upperb:阈值上限
dst:输出图像
halcon的threshold函数和inRange是支持多通道的。
当双通道图像输入时:


图片2.png

多通道图像依次类推。这里也可以看出dst是一个尺寸与src相同的单通道图像。
弄清函数的实现原理过后,我就疑惑了:inRange函数的结果明明是二值化,虽然这里的阈值是一个range?为啥不写到Threshold函数的Type中呢?我觉得可能是inRange本义是找出图像中在range中的像素,输出图像的结果以(0 or 255)表示是否在range中,分类结果的输出方式其实也是一种二值化结果。所以从二值化角度而言,inRange确实有点“名不副实”了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容