特大尺寸图片(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之类
推荐阅读
- 盐城■盐城:千余件老物件慰市民“乡愁”
- 滁宁城际铁路一期项目汊河新城特大桥箱梁架设完成
- 广西警方侦破特大涉枪贩毒案嫌犯开枪拒捕自杀
- 刺猬■江苏特大非法狩猎案一审宣判:涉及黄鼠狼1220只、刺猬295只
- 浙江舟山破获一起烟草类特大非法经营案涉案1000余万元
- 江苏摧毁特大吸食、贩卖“笑气”犯罪团伙警方移送起诉18人
- “九层妖塔”特大盗窃案公益诉讼赔偿金足额执行到位
- 被害人遍布29省涉案金额1200多万元沈阳警方打掉特大古董拍卖诈骗团伙
- 江苏如皋:冬日龙游湖景如画
- |77岁老人烙画《古韵扬州》铁笔生辉“烙”出“好地方”
