OpenCV双层垫子显示为全白色
OpenCV double mat shows up as all white
我有一个类型6(双值,单通道)的垫子,数据范围从0到255。我可以使用以下代码打印出数据:
double* data = result.ptr<double>();
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
std::cout<<data[i*step+j]<<"t";
这看起来非常正常——在0到255的范围内,也就是我所期望的大小。然而,当我尝试显示图像时:
imshow(window_name, result);
waitKey();
我只是得到一个白色的图像。只有白色像素。没有别的。
从文件加载其他图像并在窗口中显示效果良好。
使用Windows 7,OpenCV 233
cv::imshow以以下方式工作-
- 如果图像是8位无符号的,则按原样显示
- 如果图像是16位无符号或32位整数,则像素除以256。也就是说,值范围[0255*256]被映射到[0255]
- 如果图像是32位浮点图像,则像素值将乘以255。也就是说,值范围[0,1]被映射到[0255]
您的矩阵位于第三类,imshow期望值在0和1之间,因此它将其乘以255。由于您的值已经在0和255之间,因此您将得到不想要的结果。因此,将0和1之间的像素标准化将起作用。
如果使用imshow
,则需要规范化浮点图像,使其值介于0.0到1.0之间。我敢打赌,你的值超过了1.0,因此这些像素都设置为255,这就是白色图像。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 在 SFML 中不使用动态内存时显示白色纹理代替实际纹理
- 用SFML和OpenGL显示白色三角形
- 纹理在 opengl 中显示为白色
- OpenCV双层垫子显示为全白色
- OpenGL位图程序只显示白色,黑色和黄色
- OpenGL显示白色纹理
- 如何在win32中刷新图像显示白色,保持文字不变