特大尺寸图片(26258*13277),用OpenCV的cvSaveImage()函数存储,总是报错存储空间不够。有啥解决办法

这不是换内存能解决的问题,你的内存够用。就算内存不够,也还有交换区呢。都占满了你得跑多少程序?你的问题在于alloc失败。你很可能编译的是32位程序。尝试将你的程序和OpenCV都编译成64位的。理论上说32位程序支持地址空间有4G。但是默认情况下系统会保留2G,你能用的只有2G。再算上乱七八糟的变量和代码占掉一些,能用堆空间的一般1.9G左右。这也就是你最大能malloc到的内存。如果不断地申请释放,会导致内存碎片。这种情况下剩余0.9G你也无法申请到0.9G的连续空间。你可以通过修改编译器选项,让系统自己只保留1G内存,剩下的3G留给你用。在32位系统中可以使用,但在64位系统中没有尝试过。更好的办法就是直接把你的程序编译成64位的。最好的办法就是你修改你的算法,分块算。
■网友
单机处理大尺寸数据唯一的办法是分块处理。程序在跑之前你需要简单算一下空间复杂度,1045882404b = 997MB,说明你的程序试图一次申请这么多内存,但是系统提供不了。1. 换太内存更大的机器跑。2. 修改程序,改成分块处理。类似tile处理。当然,能不能分块本身取决于算法,绝大多数算法是可以分块实现的,并不要求所有的数据同时存在于内存中。能否实现,取决于编写者能力。另一种内存不够并不是由于待处理数据大,而是中间变量消耗大量内存。需要针对性地处理。总之一句话,用现成的软件,内存不够换电脑;自己写的程序,内存不够改算法。无非就是在空间和时间两种资源的权衡。
■网友
读写这种非常规图片,直接用库吧。建议用tiff格式,支持block和strip 读写。推荐libtiff 或是 bigtiff, API都很简单的。
■网友
特大图像,要么切成瓦片,要么换格式。
【特大尺寸图片(26258*13277),用OpenCV的cvSaveImage()函数存储,总是报错存储空间不够。有啥解决办法】 例如GeoTIFF,来试试 libgeotiff 吧。

■网友
用64位可以,我用64位的OpenCV写过比你这个还大的
■网友
其实我对报错的Unknown function这点有点纠结,题主能够写一下你使用cvsaveimage是怎么写得吗?试试看其他的save function,比如说imwrite之类


    推荐阅读