Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV:convertTo返回白色图像(有时)_C++_Opencv - Fatal编程技术网

C++ OpenCV:convertTo返回白色图像(有时)

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之间。这就是为什么,

我对OpenCV比较陌生,我遇到了一个难题。我有一个输入图像,想将其从CV_8U类型转换为CV_32F类型

对于某些图像,它可以通过
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)