gpt4 book ai didi

python - 如何使用 OpenCV 在 Python 中管理大图像?

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:38 25 4
gpt4 key购买 nike

我正在尝试处理一个巨大的 numpy 数组,然后使用 cv2.imwrite(numpy.array) 将其写入 JPEG 图像。不幸的是,我正在使用的东西不适合我的 RAM,即使最终的 JPG 图像应该只有大约 200 MB。

如何在不使 RAM 重载的情况下管理此类负载?

有没有其他方法可以在不将整个数组立即存储在我的 RAM 中的情况下写入图像?我可以一次加载数组的一小部分,但我不知道要使用哪个模块/函数来写入图像,而不是立即将整个内容存储在我的 RAM 上。

截至目前,我已将整个图像保存为 4 个较小的图像(四分之一),因为这是我用有限的 RAM 所能做的最好的事情。但我仍然希望能够将它们拼接成一个完整的图像。目标图像是 3 channel 26112 x 20480 图像。

最佳答案

如果图像大小为 26112 x 20480,具有三个 channel ,每个 channel 一个字节,未压缩的数据需要 3 x 26112 x 20480 字节,大约为 1.5 GB。 JPEG 文件可以比它小得多,因为它使用有损压缩,但图像的 OpenCV 表示不会。

Jpegtran 所证明的那样,某些操作(例如在 block 边界上裁剪)是可能的但是对于您在 OpenCV 中所做的大多数事情,您将不得不解压缩数据。如果您的算法恰好是可以直接根据 8x8 block 的 DCT 系数编写的算法,则您不必解压缩,但 OpenCV 不会在这方面帮助您。

我不知道用OpenCV是否可行,但是numpy支持memory-mapped I/O原始数组数据。当您读取不在内存中的数据页时,操作系统会从映射文件中读取它,如果内存不足,它会驱逐一些页面。如果这将是高性能的,它将取决于您的数据访问模式。原则上,您应该能够简单地在一个文件上调用 mmap,您已经将所有图像数据解压缩到正确的内存布局和 wrap the pointer in an OpenCV array 中。 ,但我自己还没有尝试过。

关于python - 如何使用 OpenCV 在 Python 中管理大图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com