我正在编写基于OpenCV的C ++软件来分析大量的大型TIFF图像 - 特征提取和表征。我目前的方法是尝试将每个图像分割成较小的裁剪部分,单独分析每个图像并合并结果。我试图使用Image Magick转换函数进行裁剪,使用标志:
convert input.tif -crop 4000x4000 +repage -scene 0 "output%d.tif"
然而,这可以运行数小时,利用100%的RAM和100%的IO吞吐量而不产生任何输出。
magick识别input.tif给出的图像细节是:
input.tif TIFF64 63488x49408 63488x49408+0+0 8-bit sRGB 9.4112GB 0.000u 0:00.031
相同的指令在较小的(大约20k×20k)下采样版本的图像上运行,在5秒内返回输出。
这台电脑有8GB内存,Windows 8 x64和2.00GHz CPU。
有人能告诉我如何确定出错的地方吗?否则,任何人都可以建议我采用另一种方法来解决这个问题吗?
编辑1:更多信息
c:\test>identify -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 14.888GP
Memory: 6.9326GiB
Map: 13.865GiB
Disk: unlimited
File: 1536
Thread: 4
Throttle: 0
Time: unlimited
答案 0 :(得分:1)
我认为我的另一个答案here应该对你有很大的帮助,但另外一件事你可以检查,就是你允许ImageMagick使用8GB的RAM。试试这个命令
identify -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 2GiB <---
Map: 4GiB
Disk: unlimited
File: 192
Thread: 1
Throttle: 0
Time: unlimited
并检查Memory
选项。
如果它很低,你可以在命令行上用这样的东西增加它
convert -limit memory 6GiB ...
或使用这样的环境变量:
export MAGICK_MEMORY_LIMIT=8000000000
identify -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 7.4506GiB <---
Map: 4GiB
Disk: unlimited
File: 192
Thread: 1
Throttle: 0
Time: unlimited