我对OpenCV cvCanny(...)以及它可以处理的图像数据类型有一些问题。好吧,也许你们知道解决方案。

我有一个32位浮点图像,我想对其执行cvCanny。
问题是cvCanny只能处理“IPL_DEPTH_8S”或U(有符号/无符号缩写),至少我怀疑这是什么。 OpenCV手册没有指出它可以处理的内容,并且cv / cvcanny.cpp中的这一行没有引起我的希望:

...
if( CV_MAT_TYPE( src->type ) != CV_8UC1 ||
CV_MAT_TYPE( dst->type ) != CV_8UC1 )
CV_ERROR( CV_StsUnsupportedFormat, "" );
...

我的图像是灰度/单通道float32位
并且图像中的值在0.0到16.0之间。将float32强制转换为unsigned short并没有多大帮助,因为这些值会降低其精度,而且我会错过OpenCV canny的优势。

你们是否知道我的问题的解决方案? (除了使用ITK :))

最佳答案

抱歉,由于cvCanny仅支持单通道8位图像,所以我唯一想到的就是通过255/16将图像中的每个值缩放为CV_8UC1类型的新图像,以便它在0 - 255范围内以最大程度地降低您的精度。我迷路了。

08-16 00:52