我有14000x18000(~30MB)高度和宽度的位图图像。我试图用不同的图像处理库(OpenCV(使用包装器OpenCvSharp),Aforge.NET ..)处理它们,以便进行blob检测。但是,标记位图图像会导致内存分配问题。库试图将标记图像映射到32位图像。
有没有办法用较少的内存来进行标记操作? (裁剪图像不是解决方案)
例如,将位图图像标记为8位图像而不是32?
答案 0 :(得分:1)
如果没有8位的答案......即使有......
出于速度和记忆的目的,我强烈建议缩小图像尺寸(不裁剪)。使用高质量的插值,如this sample does,只调整到50%,而不是缩略图(7.5MB内存)。
你没有提到你不想这样做,我假设你可能不想尝试它,认为图书馆将以全分辨率进行更好的斑点检测。在你大肆宣传这个想法之前,你需要用一个样本图像的全分辨率子部分测试它,该图像的大小将与图书馆将处理的相比,相比50%的相同子部分。
除非你真的这样做,否则你无法知道。您还可以计算出图片可以使用的最大内存量,计算一个调整大小因子来定位该数字(为了安全而减少它 - 当测试中的事情爆发时你会想到这一点)。如果您关心原始图像中的内容,请将其按比例缩放。
答案 1 :(得分:0)
这可能无法解决您的特定问题(或者可能),但是您是否考虑将帧拆分/分段为2x2(或3x3)矩阵,并尝试分别处理它们中的每一个。然后根据您在4(或9)帧中找到斑点的位置,关联并合并相邻的斑点以制作单个斑点。当然,这种高级blob合并必须是你自己的逻辑。
PS>不可否认,对Aforge的高度肤浅的了解。没有实际操作经验。