C / OpenCV内存管理

时间:2011-03-03 06:29:18

标签: c memory-management opencv

我正在处理OpenCV,并从DFT example code处获得一些内存管理问题。

1 在openCV中,创建双通道图像的最有效方法是什么?链接的代码似乎分配了两个IplImages,然后通过

组合它们
    cvMerge(realInput, imaginaryInput, NULL, NULL, complexInput);

我这可以制作一个深层复制来合并这两个图像,这是浪费两个图像。

2 此外,将矩阵分成两部分的最佳方法是什么?链接到代码使用

    cvSplit( dft_A, image_Re, image_Im, 0, 0 );

但我认为这可能会在dft_A和image_Re / image_Im中保留单独的数据副本(另外浪费两张图像)

谢谢!

PS我知道链接到的代码没有释放它的已用内存......很快就会修复

PPS我可以直接测试这个,但我想了解如何从文档中解决这个问题。

1 个答案:

答案 0 :(得分:1)

Opencv做了很多聪明的内存管理,以避免不必要的副本。编写简单的niave解决方案然后进行分析以检查是否需要或可以改进它通常是有意义的。

请参阅http://opencv.willowgarage.com/documentation/cpp/memory_management.html

如果目标图像是平面的,则合并可能非常有效 - 如果它是平坦的,则无论如何都必须复制各个实数和虚数值。