OpenCV 不会加载大图像(~4GB)

2024-02-05

我正在开发一个程序,该程序从相当大的图像中检测彩色地面控制点。 TIFF 图像约为 3 - 4 GB(大约 35 000 x 33 000 像素)。 我正在使用 Python 2 和 OpenCV 进行图像处理。

import cv2
img = 'ortho.tif'
I = cv2.imread(img, cv2.IMREAD_COLOR)

这部分不会(总是)产生错误消息。显示图像时:

cv2.imshow('image', I)

我还尝试使用 matplotlib 显示图像:

plt.imshow(I[:, :, ::-1])  # Hack to change BGR to RGB

OpenCV 或 Python 对于大图像有什么限制吗? 您建议如何加载此图像?

PS:我做这项工作的计算机是Windows 10“工作站”(它有足够的马力来处理图像)。

预先感谢您的帮助:)


实施imread() https://github.com/Itseez/opencv/blob/2.4/modules/highgui/src/loadsave.cpp:

Mat imread( const string& filename, int flags )
{
    Mat img;
    imread_( filename, flags, LOAD_MAT, &img );
    return img;
}

这会分配对应于将图像加载为连续数组的矩阵。因此,这(至少部分地)取决于您的硬件性能:您的机器必须能够分配 4 GB 连续 RAM 阵列(如果您使用的是 Debian 发行版,您可以通过运行以下命令来检查 RAM 大小:vmstat -s -SM https://www.thomas-krenn.com/en/wiki/Linux_Performance_Measurements_using_vmstat).

出于好奇,我试图获得一个连续的内存阵列(一个很大的,但是less比您的 4 GB 图像需要的那个)使用ascontiguousarray http://docs.scipy.org/doc/numpy/reference/generated/numpy.ascontiguousarray.html#numpy.ascontiguousarray,但在此之前,我已经偶然发现了一个内存分配问题:

>>> img = numpy.zeros(shape=(35000,35000))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
>>>

实际上,即使您有足够的 RAM,操作 4 GB RAM 图像的像素也不是一个好主意,无论如何您都需要将其分割为兴趣区域 http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#image-roi,较小的区域,并且可能是channels http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#splitting-and-merging-image-channels也取决于您要对像素执行的操作的性质。

EDIT 1:

正如我在您的答案下面的评论中所说,如果您有 16GB 的 RAM 并且您能够使用以下命令读取该图像scikit http://scikit-image.org/docs/dev/api/skimage.html那么你没有理由不能使用 OpenCV 做同样的事情。

请尝试一下:

import numpy as np # Do not forget to import numpy
import cv2    
img = cv2.imread('ortho.tif')

您忘记在原始代码中导入 Numpy,这就是 OpenCV 显然无法加载图像的原因。所有 OpenCV 数组结构都与 Numpy 数组相互转换,并且您读取的图像由 OpenCV 表示为内存中的数组。

EDIT 2:

OpenCV 可以处理大小最大为 10 GB 的图像。但这是真的cv2.imwrite()功能。为了cv2.imread()然而,要读取的图像的大小要小得多:这是 2013 年 9 月宣布的一个错误(问题 3258 #1438 https://github.com/Itseez/opencv/pull/1438)据我所知,这仍然没有解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV 不会加载大图像(~4GB) 的相关文章

  • Flask 中“缺少 CSRF 令牌”,但它在模板中呈现

    问题 当我尝试登录 使用 Flask login 时 我得到Bad Request The CSRF session token is missing但令牌正在呈现 在模板中 secret key 已设置 并且我在本地运行localhost
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • Matplotlib 图例,跨列添加项目而不是向下添加项目

    对于下面的简单绘图 有没有办法让 matplotlib 填充图例 以便它从左到右填充行 而不是第一列然后第二列 gt gt gt from pylab import gt gt gt x arange 2 pi 2 pi 0 1 gt gt
  • 将 Python Pandas DataFrame 写入 Word 文档

    我正在努力创建一个使用 Pandas DataFrames 的 Python 生成的报告 目前我正在使用DataFrame to string 方法 但是 这会作为字符串写入文件 有没有办法让我实现这一目标 同时将其保留为表格 以便我可以使
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • 为什么将模块级代码放入函数中然后调用该函数在Python中速度更快?

    在亚历克斯 马尔泰利的回应中使 Python 脚本面向对象 https stackoverflow com questions 1813117 making a python script object oriented 他提到在 Pyth
  • Seaborn 中没有线性拟合的散点图

    我想知道是否有办法关闭seaborn中的线性拟合lmplot或者是否有一个等效函数可以生成散点图 当然 我也可以使用 matplotlib 但是 我发现 seaborn 中的语法和美学非常吸引人 例如 我想绘制以下情节 import sea
  • 如何获取分类数据的分组条形图

    I have a big dataset with information about students And I have to build a graph of dependencies between different value
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 从 wxPython 事件处理程序中调用函数

    我正在努力寻找一种在 wxPython 事件处理函数中使用函数的方法 假设我有一个按钮 单击该按钮时 它会使用事件处理程序运行一个名为 OnRun 的函数 但是 用户忘记单击 OnRun 按钮之前的 RadionButton 我想弹出一个
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 两种 ODE 求解器之间的差异

    我想知道 两者之间有什么区别ODEINT and solve ivp用于求解微分方程 它们之间有什么优点和缺点 f1 solve ivp f 0 1 y0 y0 is the initial point f2 odeint f y0 0 1
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • 基于值的 matplotlib 条形图颜色

    有没有一种方法可以根据条形图的值对条形图的条形进行着色 例如 values below 0 5 red values between 0 5 to 0 green values between 0 to 08 blue etc 我找到了一些
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 在 WCF 服务库项目中使用自定义 ServiceHostFactory

    我正在编写一个 WCF 服务 该服务在内部严重依赖于控制反转 我想在自定义 ServiceHostFactory 内引导 初始化我的 IoC 容器 我读过一些可用的不同钩子的示例 但它们似乎都不适合我 This approach http
  • AntiForgeryToken 登录后无效

    我有一个用户可以在不登录的情况下发布的表格 但是 如果他的电子邮件被识别 则需要密码 密码表单通过 Ajax 进行验证 如果成功 则提交主表单 两种形式都需要有效的 AntiForgeryToken 问题是 密码检查作为副产品还会使用户登录
  • Android:如何以编程方式突出显示 EditText?

    requestFocus 将光标移动到编辑框 但不突出显示它 我想突出它 就像它被触摸一样 我怎样才能做到这一点 尝试这个 field setSelection int startIndex int endIndex 第一个参数 start
  • Xamarin 是否有 #if 或 #ifdef 来确定平台?

    例如 ifdef iOS ifdef android 等 如果有 if就更好了 iOS if MOBILE Console WriteLine MOBILE is defined endif if IOS Console WriteLine
  • 在包装物品的行上添加水平线分隔符

    我使用 css flexbox 在行中放置未知数量的项目 如果需要 可以环绕到其他行 我的问题是 每行之间是否可以有一条水平线 Here http codepen io anon pen jbQpvP这是我所拥有的一个简单的例子 如果打开
  • 如何使用last_insert_rowid插入多行?

    假设我有一个包含两个表的数据库Persons and PhoneNumbers 其中PhoneNumbers表有一个外键Persons 如果我想在一次事务中插入一个拥有电话号码的人 我可以编写如下查询 BEGIN TRANSACTION I
  • 如何在java代码中使用.dll文件?

    我有一个 dll 文件 我必须在 java 中使用它 此 dll 文件有一个参数化方法 该方法应返回字符串类型 当我向它传递参数时 我收到的消息为Native methods do not specify a body 这是代码 packa
  • 使用建议时,Visual Studio 2017 强制在方法名称处添加“async”(Ctrl + .)

    我在使用 Visual Studio 2017 时遇到问题 当我想使用 await 调用方法并按 Ctrl 时 要向方法添加 async VS2017将强制在方法名称处添加 async 这有时很有用 但在某些覆盖方法 如 OnNaviged
  • 如何使用 dplyr 中的排列来对组进行排序?

    我想对数据进行分组 然后排列表格 以便首先显示具有最高值的组 例如 在 mtcars 数据集中 我想按气缸数对汽车进行分组 然后排列表格 以便具有最高平均值的组mpg首先显示 mtcars gt group by cyl gt arrang
  • wpf中可点击图像映射的最佳方法

    我有一个包含 c WPF 中许多部分的图像 我想让每个部分都点击思考 我尝试将图像拆分为多个部分并在每个部分上创建事件 图像 但问题是图像的嵌套部分 制作图像地图的最佳方法是什么 您可以使用 Microsoft Expression Stu
  • 如何使用 JSHint 和 RequireJS 禁用警告“define”未定义

    我在我的项目中使用 RequireJS AMD 当我在项目上运行 jshint 时 它会抛出类似错误 在 AMD 脚本中 define is not defined 在 Mocha 测试用例中 describe is not defined
  • Cython“无法为 cdef 类、结构或联合中的字段分配默认值”

    我正在第一次尝试将 Python 代码移植到 Cython 我对 C 的经验非常有限 我正在尝试创建一个相对简单的类来存储多维数组 为了解决这个问题 我们将属性时间保留为长度为 1 的单个一维数组 目前 我收到错误 cdef np ndar
  • 如何为以前的 Java 版本构建 jar?

    我正在尝试编译我的代码并在不同的服务器上运行它 问题是我的 JRE 版本是 Java 版本 1 6 0 13 而服务器上的 JRE 版本是 Java 版本 1 4 2 当我尝试在服务器上运行 jar 时 这给了我 无法识别的类文件版本 异常
  • 如何使用子模块克隆本地存储库?

    假设我递归地克隆一个存储库 git clone recursive ssh server project client Cloning into client remote Counting objects 191 done remote
  • jersey (+ Jackson) 地图字段序列化

    我有一个简单的球衣 Web 服务 我想使用 生成包含地图字段的对象 例如 XmlElement private Map
  • 如何移动 MySQL 表中的列?

    目前我有以下 MySQL 表 Employees empID empName department 我想将表更改为以下内容 Employees empID department empName 如何使用ALTER声明 注意 我只想更改列位置
  • 如何使用 boto3 读取 s3 存储桶中存在的 JSON 文件?

    我在 s3 存储桶中保存了一些 JSON 文件 我想使用 boto3 读取这些 JSON 文件的内容 这个问题可能是重复的已经在这里回答了问题 https stackoverflow com questions 36205481 read
  • getElementsByClassName() 在 IE6、IE7、IE8 等旧版 Internet Explorer 中不起作用

    下面的代码 var borderTds document getElementsByClassName leftborder 在 Internet Explorer 6 7 和 8 中显示错误消息 对象不支持该方法 如何在这些浏览器中按类选
  • 在参数变量上使用 Like ?

    Select Column1 From Table Where Variable Like Column2 似乎并不像我想象的那样工作 有什么建议么 模糊的问题 您是否以错误的方式获取了 Category 和 Variable sqlFid
  • OpenCV 不会加载大图像(~4GB)

    我正在开发一个程序 该程序从相当大的图像中检测彩色地面控制点 TIFF 图像约为 3 4 GB 大约 35 000 x 33 000 像素 我正在使用 Python 2 和 OpenCV 进行图像处理 import cv2 img orth