1.mat文件中数据(数据最大4000)转化成uint8,再进行图像显示,用imshow函数显示并保存
2.用imshow(x,camp=gray,vmin=0,vmax=4000)所显示图像并保存
问题:两个方法获得的图像有什么差别,我认为都是uint8数据形式,灰度值应该相同,但是用plt.imread函数读取图像,读出来的数值不同,这是为什么?
![](https://profile-avatar.csdnimg.cn/b4c5e2250c224304a81974c7e557f082_cg666666.jpg!4)
python+mat文件转换图像
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- MarkHan_ 2023-03-13 18:39关注
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这可能是因为plt.imread函数默认将图像读入为float32类型,而不是uint8类型,因此数值范围为[0, 1]而不是[0, 255]。在使用imshow函数时,如果数据类型为float类型,则vmin和vmax参数默认为[0, 1],而如果数据类型为uint8,则默认为[0, 255]。因此,当使用plt.imread读取图像并使用imshow(x, cmap='gray', vmin=0, vmax=4000)时,将会对数值范围[0, 1]的图像进行调整,因此可能会导致显示结果不同。为了避免这种情况,可以使用astype函数将读取的图像转换为uint8类型,例如:import scipy.io as sio import matplotlib.pyplot as plt data = sio.loadmat('data.mat')['data'] # 从.mat文件中读取数据 data_uint8 = (data / 4000 * 255).astype('uint8') # 将数据转换为uint8类型 plt.imshow(data_uint8, cmap='gray', vmin=0, vmax=255) # 显示图像 plt.savefig('data_uint8.png') # 保存图像
或者,可以在使用plt.imread读取图像时指定dtype参数为uint8类型,例如:
import matplotlib.pyplot as plt data = plt.imread('data.png', dtype='uint8') # 从图像文件中读取数据,指定数据类型为uint8 plt.imshow(data, cmap='gray', vmin=0, vmax=255) # 显示图像 plt.savefig('data.png') # 保存图像
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵
- ¥15 cfx离心泵非稳态计算