OpenCV:convertTo有时返回白色图像

14

我对OpenCV比较新,遇到了一个问题。我有一个输入图像并希望将其从类型CV_8U转换为CV_32F。

对于某些图像,通过input.convertTo(output, CV_32F)可以很好地工作,但对于其他图像,输出仅会给出完全白色的图像。

通道数、维度以及深度都相等,问题在哪里?


我不太清楚如何根据提供的信息进行故障排除,而且我使用OpenCV已经有一段时间了,对这些类型的错误没有内存知识,但从文档中可以看出:该方法将源像素值转换为目标数据类型。最后应用saturate_cast<>以避免可能的溢出。是否有关于失败的图像导致saturate_cast<>失控的问题? - im so confused
你能否发布一张出现问题的图片以及你正在使用的代码? - Sassa
1个回答

20

我认为结果是正常的。

当你使用convertTo将CV_8U1转换为CV32F1时,像素值(例如,255)变为255.0。 但当你试图`imshow'这个结果图像时,命令希望所有像素值都在0.0和1.0之间。如果不对图像进行重新缩放,图像看起来会全是白色。

所以如zzz所指出的那样,这将解决问题(感谢他)。

input.convertTo(output, CV_32F, 1.0/255.0)

2
因此,请使用convertTo的第三个参数作为比例因子。在您的情况下,它将是1.0/255.0。这样,当图像转换时,它就会被缩放。请参阅文档:http://docs.opencv.org/modules/core/doc/basic_structures.html?highlight=convertto#void%20Mat::convertTo%28OutputArray%20m,%20int%20rtype,%20double%20alpha,%20double%20beta%29%20const - zzzz
做完这个之后,我的整张图片现在都是黑色的。每个像素的值都非常低,但看起来范围似乎没有改变。 - arvind.mohan
@arvind.mohan 请尝试检查另一个可能导致图像变黑的原因。例如,您的原始图像是否为16位?在缩放因子方面,您是传递整数还是浮点数或双精度数?这种方法已经使用了很长时间,可能不是您转换后的图像变黑的原因。 - Tae-Sung Shin
@Tae-SungShin,绝对值没有区别,原始图像是8位整数。我将其转换为64FC3并缩放1.0 / 255.0f。当我将转换后的矩阵转储为jpg图像时,缩放似乎没有改变。 - arvind.mohan
@arvind.mohan 等等,你要将双精度图像保存为jpg格式?(1)你可能无法使用OpenCV保存双精度图像。(2)即使你能够保存该图像,也没有多少程序可以显示双精度图像。 - Tae-Sung Shin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接