小丫么小二郎儿 2023-03-13 10:06 采纳率: 42.9%
浏览 80
已结题

python+mat文件转换图像

1.mat文件中数据(数据最大4000)转化成uint8,再进行图像显示,用imshow函数显示并保存
2.用imshow(x,camp=gray,vmin=0,vmax=4000)所显示图像并保存
问题:两个方法获得的图像有什么差别,我认为都是uint8数据形式,灰度值应该相同,但是用plt.imread函数读取图像,读出来的数值不同,这是为什么?

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-13 10: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') # 保存图像
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月14日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部