2011-03-30 87 views
0

我有位图图像像14000x18000(〜30MB)的高度和宽度。我正在尝试使用不同的图像处理库(OpenCV(使用封装OpenCvSharp),Aforge.NET ..)处理它们以便进行斑点检测。但是,标记位图图像会导致内存分配问题。库尝试将标记的图像映射到32位图像。大块位图图像内存分配blob检测,C#.Net

有没有一种方法可以用少量的内存来完成标签操作? (裁剪图像不是解决方案)

例如,将位图图像标记为8位图像而不是32位?

回答

1

如果没有对8位的事情的答案......即使有...

对速度和内存的目的,我会强烈建议调整缩小图片(不裁剪)。使用像this sample does这样的高质量插值,只调整到50%,而不是缩略图(7.5MB im memory)。

你没有提到你不想这样做,我假设你可能不想尝试它,认为图书馆会在全分辨率下做更好的斑点检测。在您创作想法之前,您需要测试的样本图像的全分辨率小节,该小节的大小与图书馆处理的大小相比,相同的小节为50%。

除非你真的这样做了,否则你无法知道。您还可以计算图片可以使用的最大内存量,计算调整大小因子以定位该数字(为了安全起见将其降低 - 当测试中出现问题时您会计算出此数值)。如果您关心原始图像中的东西,请按比例缩小它的大小。

+0

我想分配1GB内存和c#给异常“分配失败..字节”,但我有8GB的内存。我如何允许它使用需要的? – cerezza 2011-03-31 12:45:40

+0

@cerezza - 复杂而令人心碎的问题!最重要的是,.NET并不总是尽可能多地分配,不知道为什么。关于[这个线程]的一些见解(http://stackoverflow.com/questions/2985408/net-out-of-memory-troubleshooting)。在.net中分配大量内存是一个单独的问题,需要大量的搜索。 – FastAl 2011-03-31 14:03:00

0

这可能无法解决您的特定问题(或可能),但是您是否已考虑将帧分割/分割成2x2(或3x3)矩阵,并尝试分别对它们分别进行处理。然后根据您在4(或9)帧中找到斑点的位置,关联并合并相邻斑点以形成单个斑点。当然,这种高级别的blob合并必须是您自己的逻辑。

PS>无可否认,通过对Aforge的很肤浅的了解,没有任何实际操作经验。