scipy imsave 保存错误的值

2023-12-01

我正在尝试编写使用 numpy 和 scipy 生成视差图的代码,但是我在图像的 numpy 数组中存储的值与输出图像中实际显示的值完全不同,并使用杂项保存。我保存。例如,在数组中,没有一个值大于 22,但在图像中,我有从 0 到 255 的完整范围的值。我认为也许 imsave 正在拉伸这些值,以便最大值显示为图像中的值是 255,但我使用 imsave 创建的其他图像的最大值低于 255。

这些是我用来创建视差图的函数,给定两个沿 x 轴移动的 pgm 图像:

def disp(i, j, winSize, leftIm, rightIm): #calculate disparity for a given point
    width = leftIm.shape[1]
    height = leftIm.shape[0]
    w = winSize / 2
    minSAD = 9223372036854775807 #max int
    for d in range(23):
        SAD = 0.0 #SAD
        k = i - w
        v = i + w
        m = j - w
        n = j + w
        for p in range(k, v+1): #window - x
            for q in range(m, n+1): #window y
                if(p - d > 0 and p < width and q < height):
                    SAD += abs((int(leftIm[q][p]) - int(rightIm[q][p - d])))
        if(SAD < minSAD):
            minSAD = SAD
            disp = d
    #       print "%d, %d" % (i, j)
    return (disp, SAD)

def dispMap(winSize, leftIm, rightIm):
    width = leftIm.shape[1]
    height = leftIm.shape[0]
    outIm = np.zeros((height, width)) 
    SADstore = np.zeros((height, width))
    w = winSize / 2
    for i in range(w, width-w):
        for j in range(w, height/3-w):
            dispout =  disp(i, j, winSize, leftIm, rightIm)
            outIm[j][i] = 1 * dispout[0] #should normally multiply by 4
            SADstore[j][i] = dispout[1]
    return (outIm, SADstore)

忽略 SAD/SAD 存储返回值,我已确保这些不会影响我当前的进程。

这是我用来获取输出的代码:

disp12 = dispMap(9, view1, view2)
disp12im = disp12[0]
misc.imsave('disp121.pgm', disp12im)

目前, disp12im 中的任何内容都不应该 > 23。如果我运行 for 循环来检查数组上的这一点,这仍然是正确的。但是,如果我加载保存的图像并对值运行相同的 for 循环,我会得到大量超过 23 的数字。我做错了什么?


dtype数组的改变自np.float64(数据类型disp12im)到图像中存储的 8 位值。

为了避免这种情况,请将图像转换为数据类型np.uint8在把它交给之前imsave:

misc.imsave('disp121.pgm', disp12im.astype(np.uint8))

例如,我会保存这个x作为 PGM 图像:

In [13]: x
Out[13]: 
array([[  1.,   3.,   5.],
       [ 21.,  23.,  25.]])

In [14]: x.dtype
Out[14]: dtype('float64')

Save x不变,然后读回来:

In [15]: imsave('foo.pgm', x)

In [16]: imread('foo.pgm')
Out[16]: 
array([[  0,  21,  42],
       [212, 234, 255]], dtype=uint8)

这些值已扩展到完整的 8 位范围。

相反,转换x to np.uint8保存之前,然后读回:

In [17]: imsave('foo.pgm', x.astype(np.uint8))

In [18]: imread('foo.pgm')
Out[18]: 
array([[ 1,  3,  5],
       [21, 23, 25]], dtype=uint8)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scipy imsave 保存错误的值 的相关文章

随机推荐

  • 如何修复此正则表达式以便它正确替换 * (在单词之间)?

    我正在练习正则表达式 我想创建正则表达式 into em 就像使用 Markdown 一样 el el replace b g em el el replace b s g 1 em 这在大多数情况下都有效 但是 如果您将正则表达式应用于此
  • 如何将变量的值放入字符串中(将其插入字符串中)?

    我想放一个int into a string 这就是我现在正在做的事情 num 40 plot savefig hanning40 pdf problem line 我必须为几个不同的数字运行该程序 所以我想做一个循环 但是像这样插入变量不
  • For 循环除数

    对于 C 我是一个业余爱好者 但我已经收到了一项超出我知识范围的任务 任务是输入数字 n m 程序必须将其视为一个区间 在区间中检查是否存在相同指数的数字之和 编辑 15 10 18 事实证明我没有正确理解我的任务 这里是 用户输入两个数字
  • 使用 SQL JOIN 和 COUNT

    假设有两张表 一张保存用户信息 一张保存某种类型的用户记录 例如收据 用户和收据之间存在一对多的关系 检索用户 按最大收据数量排序 的最佳 SQL 方法是什么 我能想到的最好方法是使用 join 和 count 返回用户数组及其相关收据数量
  • on:click 在 Svelte 中更新 DOM 时不起作用

    The send random 当我将其添加为新添加的 DOM 中的指令时 它不起作用 for let i 0 i lt items length i data div class block received span class ite
  • Selenium WebDriver CSS 选择器帮助 - 用于选择日期

    我需要从小窗口中选择日期 下面是 html 代码示例 有人可以帮我通过 CSSSelector 或任何其他最适合执行此任务的方式选择日期吗 td class a class ui state default href 1 a td td c
  • Bootstrap - 5 列布局

    我正在尝试获得 5 列全宽布局 但找不到适合我需求的解决方案 这是我使用的代码 div class container div class row div class col lg 12 style border 1px solid red
  • 如何共享 Facebook 页面选项卡内部页面的内容?

    我正在尝试共享页面选项卡内部页面上的内容 此页面上的每个项目都有一个 赞 按钮 我想将用户重定向到该页面并通过 JS 滚动到该项目 我最好不要透露该网站的真实网址 换句话说 分享这样的事情 问题是当我尝试分享上面的网址时 Facebook
  • NSData 存储在某处

    最近我创建了一个帖子 NSData 缓存例程 但是 现在我想更具体地说明我的要求 你看 我有 轮播 这实际上是一个有 7 个图像的滚动视图 当它第一次出现时 它会从互联网加载图像并自动滚动 我的问题是 我不想每次滚动时都加载图像 幸运的是
  • 获取我的 wifi IP 地址 Android

    当手机连接wifi时 如何获取手机的ip地址 我找到了一个方法here但即使我在 wifi 下 它也会返回类似 24 182 239 255 的东西 并且我期望类似 192 168 1 10 的东西 我想要这样的东西 if you are
  • 封送切片结果为字符串

    我正在尝试对一部分进行 json 编码uint8值 但这样做会产生字符串 举个例子 这个 d uint8 1 2 3 4 data err json Marshal d fmt Println string data err 结果是 AQI
  • Firefox 中的全屏背景图像

    我有一个覆盖浏览器屏幕的整个宽度和高度的背景图像 它在 Chrome 和 IE 中工作 但在 Firefox 中图像被下推 有什么想法发生了什么吗 CSS HTML div img src http image iloqal com lib
  • 如何从 Telegram 获取公共频道的消息

    我需要阅读电报应用程序中一些公共频道的消息 我想将电报频道文本存储在文本文件中 我想使用Python 我尝试过电视马拉松 但它太复杂了 我的代码有一些错误 from telethon tl functions messages import
  • 有没有办法返回当前登录的设备用户数?

    有没有办法计算出有多少用户使用 devise 主动登录 Rails 应用程序 轨道3 1 gem 设计 gt 1 4 gem dm devise gt 1 5 with 数据库可验证 我正在专门寻找 ruby 代码 由于与登录相关的所有信息
  • CSS Grid 嵌套在wrapper-div 或body 元素中?

    在这个系列中 他们都使用了包装 div MDN CSS 网格布局 这是必要的吗 如果有 为什么 包装器的用途有很多 包括 按语义对元素进行分组 例如分隔页面标题 来自正文 来自侧边栏 来自页脚 从外观上对元素进行分组 例如使用周围的边框或
  • 解决错误代码:1005。无法创建表 '' (errno: 150) 错误

    我正在 mysql 中创建以下三个表 邮政局长 广告 候选人主 这是创建语句 邮政局长 CREATE TABLE postmaster POSTCODE int 2 NOT NULL DEFAULT 0 POSTNAME varchar 2
  • Hive - 可以提取常见选项以便在其他脚本中重用吗?

    我有两个 Hive 脚本 如下所示 脚本A SET hive exec dynamic partition true SET hive exec dynamic partition mode non strict SET hive exec
  • 适用于 Mac 的 VSTO?

    我使用 VSTO 构建了一个自定义 Outlook 工具栏选项 该选项将电子邮件记录在数据库中 这在 Windows 中运行良好 然而 有人问我是否可以将其迁移到 Mac for Entourage 我认为这是 Mac 版本的 Outloo
  • 混合托管和非托管 C++ 代码?

    关于将托管 C 与非托管 C 混合使用 我有几个具体问题 如果我遗漏了ref and value在类 结构声明中 这是否会自动使类 结构成为非托管的 或者我还需要包括 pragma unmanaged and pragma managed指
  • scipy imsave 保存错误的值

    我正在尝试编写使用 numpy 和 scipy 生成视差图的代码 但是我在图像的 numpy 数组中存储的值与输出图像中实际显示的值完全不同 并使用杂项保存 我保存 例如 在数组中 没有一个值大于 22 但在图像中 我有从 0 到 255