前天在改写halcon代码的时候,遇到threshold函数:
threshold(Image : Region : MinGray, MaxGray : )
image:输入的图像;
Region:二值化后的结果;
MinGray:门限值下限;
MaxGray :门限值上限;
threshold函数的意义非常简单:
我第一个想法就是在opencv中的threshold函数寻找对应的阈值类型Type(原谅我学艺不精)。但是并没有找到支持自定义左右区间的阈值类型,经过一番查找,发现inRange函数完美契合这个功能:
cv::inRange(InputArray src,
InputArray lowerb,
InputArray upperb,
OutputArray dst
)
src:输入的图像
lowerb:阈值下限
upperb:阈值上限
dst:输出图像
halcon的threshold函数和inRange是支持多通道的。
当双通道图像输入时:
多通道图像依次类推。这里也可以看出dst是一个尺寸与src相同的单通道图像。
弄清函数的实现原理过后,我就疑惑了:inRange函数的结果明明是二值化,虽然这里的阈值是一个range?为啥不写到Threshold函数的Type中呢?我觉得可能是inRange本义是找出图像中在range中的像素,输出图像的结果以(0 or 255)表示是否在range中,分类结果的输出方式其实也是一种二值化结果。所以从二值化角度而言,inRange确实有点“名不副实”了。