cvCanny和浮动32位(IPL_DEPTH_32F)问题

时间:2009-10-20 19:05:56

标签: c++ image-processing opencv edge-detection itk

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

我有一个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转换为无符号的short将无济于事,因为这些值会失去它们的精度,而且我会错过OpenCVs canny的边缘。

你们/ gals碰巧知道我的问题的解决方案吗? (除了使用ITK :))

1 个答案:

答案 0 :(得分:3)

很抱歉,由于cvCanny仅支持单通道8位图像,因此我唯一能想到的是将图像中的每个值按255/16缩放到{{1}类型的新图像中1}}使其范围从CV_8UC1到最小化您丢失的精度。