我在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 :))
答案 0 :(得分:3)
很抱歉,由于cvCanny
仅支持单通道8位图像,因此我唯一能想到的是将图像中的每个值按255/16
缩放到{{1}类型的新图像中1}}使其范围从CV_8UC1
到最小化您丢失的精度。