首页 > 其他分享 >opencv imshow 函数显示 float64 格式错误_cv2_imshow float

opencv imshow 函数显示 float64 格式错误_cv2_imshow float

时间:2024-05-19 12:57:53浏览次数:15  
标签:imshow attachments float64 float cv2 output bit 255

CSDN搬家失败,手动导出markdown后再导入博客园

在模拟高斯光斑的过程中,手动生成了下图所示的图像,使用cv2.imwrite()函数保存正常。

![[output/attachments/fa4dbbeff2a5a1f2f99acd241f220fc7_MD5.png]]

然而在使用cv2.imshow()函数显示时却出现错误

![[output/attachments/e80ba8f678e7ecde77c7a435afe81a08_MD5.png]]

原因是使用高斯函数公式生成的图像,灰度值为 float64 格式,而cv2.imshow()不支持 float64,会自动转换,参考 opencv 文档:

imshow(winname, mat) -> None
. The function may scale the image, depending on its depth:
. - If the image is 8-bit unsigned, it is displayed as is.
. - If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256.
That is, the value range [0,255*256] is mapped to [0,255].
. - If the image is 32-bit or 64-bit floating-point, the pixel values are multiplied by 255. That is, the
. value range [0,1] is mapped to [0,255].

所有像素都乘以 255,然后越界的在 255 处截断,因此显示大面积白色。
解决方法:
(1)直接截断为 np.uint8 格式

dist = cv2.convertScaleAbs(src)

效果如图

![[output/attachments/df78cfb4c85e42981cbd9797f6d4f71a_MD5.png]]

基本与原图一致,因为图像保存时也被自动截断。
(2)归一化到 [0, 255]

dist = cv2.normalize(src, None, 255,0, cv2.NORM_MINMAX, cv2.CV_8UC1)

效果如图

![[output/attachments/d3e6f80693d1209a7b4cc07a8c43aa19_MD5.png]]

相当于经过了增强,失真比较严重

标签:imshow,attachments,float64,float,cv2,output,bit,255
From: https://www.cnblogs.com/algorithmSpace/p/18200232

相关文章

  • 使用float,flex和tailwind实现同一个表单注册效果
    float方式html结构<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</titl......
  • cv2.imshow显示图片不全
    我们在屏幕上显示图片会用这个命令:cv2.imshow('img',pic),假如图片分辨率比较大,那么会出现显示不全的情况,例如:解决办法:在cv2.imshow前面加上cv2.namedWindow代码注意:两行代码中的窗口名必须保持一致不然无效,我这里都是'img'cv2.namedWindow('img',cv2.WINDOW_NORMAL)......
  • 庄子之棰 float 和 double 精度不同导致的误差
    结论:计算小数时优先选double,而不是float《庄子·天下》一尺之棰,日取其半,万世不竭。一米的棍子,一天砍掉一半,问第n天(1~20)时被砍掉的总长度是多少?类似的有小球落地反弹一半的路程,下面的代码求的是小球从50米高空落地反弹的路程,结果保留十位小数,代码看起来没啥问题,当输入......
  • scanf 中给 double 用 %f 时赋值异常, float lf, char s 同理
    结论scanf的变量要匹配对应的格式化字符串。floatf,doublelf,charc编译器提示的错误要消除,不消除不能运行;同时尽量消除警告doublefc语言中,给double类型的变量用scanf%f输入赋值时,会发生逻辑上的错误,请看代码#include<stdio.h>intmain(){doublevalue......
  • Siemens 西门子 PLC Modbus写入float字节排列
    写保存寄存器功能码16示意:在西门子PLC中,实数,float,的保存方式遵循“高字节低地址,低字节高地址”的方式。假设使用16功能码向PLC的40005写入一个float,先利用BitConverter.GetBytes(f)得到要写的float的byte[]A。根据PLC中的存储方式,要想获得正确的float,在字40005的低......
  • 【CSS浮动属性】别再纠结布局了!一文带你玩转CSS Float属性
    在网页设计的世界里,CSS浮动属性(float)就像一把双刃剑。它能够让元素脱离文档流,实现灵活的布局,但如果处理不当,也可能引发一系列布局问题。今天,我们就来深入探讨这把“剑”的正确使用方法,让你的页面布局既美观又稳定。一、什么是CSS浮动属性浮动属性是CSS中的一个定位属性,它允许元......
  • 复制粘贴的一个关于int和float在计算机中存储的答案
    同样是占32个坑,凭啥你float就比int的范围更大?  ok,这里先说明一下,假设是在32位的机器上,int是32位。而float使用的是IEEE754标准的单精度浮点数格式也是占用32位。这时候float和int都是占用32位,占用同样的空间,但float范围是更大的,那我们为啥还要int呢?为啥......
  • 如何在数据库中存储小数:FLOAT、DECIMAL还是BIGINT?
    前言这里还是用前面的例子:在线机票订票系统的数据表设计。此时已经完成了大部分字段的设计,可能如下:CREATETABLEflights(flight_idINTAUTO_INCREMENTPRIMARYKEY,flight_numberVARCHAR(10),departure_airport_codeVARCHAR(3),arrival......
  • Qt QByteArray与int、float、vector互转
    QByteArray的转换一般在串口通信中常用,将int、float、double转换为4个字节的数组(如255->[0,0,0,255],本文章一律用10进制表示),或将4个字节的数组转换为int、float、double(如[0,0,0,255]->255)。在QT界面中的使用流程,笔者总结为以下思路:从上位机发送一帧指令到串口(封包、根据具体......
  • CF1824B1 LuoTianyi and the Floating Islands (Easy Version) 题解
    分析按照\(k\)的奇偶分开考虑。\(k\)为奇数。一个好的节点有且仅有一个在任意两个有人的节点\(i,j\)的路径的交点上的最优位置。若该交点偏移\(1\)步,则必然会使路径长度和\(+1\)。故期望为\(1\)。\(k\)为偶数。任意一个好的节点仍然在任意两个有人的节点\(i,j\)的......