C++ OpenCV:convertTo返回白色图像(有时)
我对OpenCV比较陌生,我遇到了一个难题。我有一个输入图像,想将其从CV_8U类型转换为CV_32F类型 对于某些图像,它可以通过C++ OpenCV:convertTo返回白色图像(有时),c++,opencv,C++,Opencv,我对OpenCV比较陌生,我遇到了一个难题。我有一个输入图像,想将其从CV_8U类型转换为CV_32F类型 对于某些图像,它可以通过input.convertTo(output,CV_32F)正常工作,但对于其他图像,输出只能提供完全白色的图像 通道数、dims与深度相等。有什么问题吗?我相信结果是正常的 使用从CV_8U1到CV32F1的convertTo时,像素值(例如255)变为255.0。 但当您尝试“imshow”生成的图像时,该命令要求所有像素值都在0.0到1.0之间。这就是为什么,
input.convertTo(output,CV_32F)
正常工作,但对于其他图像,输出只能提供完全白色的图像
通道数、dims与深度相等。有什么问题吗?我相信结果是正常的 使用从CV_8U1到CV32F1的
convertTo
时,像素值(例如255)变为255.0。
但当您尝试“imshow”生成的图像时,该命令要求所有像素值都在0.0到1.0之间。这就是为什么,如果不重新缩放图像,图像将看起来全是白色
因此,这将达到zzz指出的效果(谢谢)
我真的不知道如何用给出的信息来解决这个问题,我很久以前就使用OpenCV,没有内存中关于这些类型错误的知识,但是从文档中:
该方法将源像素值转换为目标数据类型。最后应用饱和强制转换以避免可能的溢出
。是否有一些图像出现故障导致saturate_cast崩溃?您是否可以发布一个失败的图像加上您正在使用的代码?因此,请使用convertTo的第三个参数作为scalefactor。在您的情况下,它将是1.0/255.0。这样,图像在转换时会进行缩放。请参阅:执行此操作后,我的整个图像现在为黑色。每个像素的值都很低,但看起来范围仍然没有改变。@arvind.mohan请尝试检查使图像变黑的另一个原因。例如,您的原始图像是16位的吗?您传递的是整数而不是float还是double作为scalingfactor?此方法已使用了很长时间,可能不是您转换的图像为黑色的原因。@Tae SungShin绝对值没有差异,原始图像为8bit int。我将其转换为64FC3,并缩放为1.0/255.0f。当我将转换后的矩阵转储为jpg image时,缩放比例似乎没有改变。@arvind.mohan等等,您正在将双精度图像保存到jpg吗?(1) 不能使用OpenCV保存双精度图像。(2) 即使可以保存图像,也没有很多程序可以显示双精度图像。
input.convertTo(output, CV_32F, 1.0/255.0)