我正在爲python寫一個C++模塊。它拍攝一張圖像,做一些處理並返回圖像字典。我有內存泄漏問題,我想不通爲什麼..返回ndarray字典導致內存泄漏使用boost python
我用opencv-ndarray-conversion轉換cv::Mat
和numpy.ndarray
之間
我用Boost.Python到C++代碼轉換爲Python模塊。
我使用下面的python代碼來測試C++模塊,同時運行htop
來檢查內存使用情況。
import cv2
import this_cpp_module
for i in xrange(100000):
img = cv2.imread('a_640x480x3_image.png')
ret = this_cpp_module.func(img)
#this 'func' is mapping to one of the following c++ functions, using Boost.Python:
# func1, func2 or func3.
1,轉換圖像不導致內存泄漏
using namespace boost::python;
PyObject * func1(PyObject *image)
{
NDArrayConverter cvt;
cv::Mat mat;
mat = cvt.toMat(image);
PyObject* ret = cvt.toNDArray(mat);
return ret;
}
2,構建字典,並把圖像劃分成它不會引起內存泄漏
using namespace boost::python;
dict func2(PyObject *image)
{
dict pyDict;
object objImage(handle<>(borrowed(image)));
pyDict[std::string("key")] = objImage;
return pyDict;
}
3,但將它們結合導致內存泄漏(每個循環大約1MB)
dict func3(PyObject *image)
{
return func2(func1(image));
}
我無法弄清楚。一切似乎都對我來說是正確的,但將它們結合在一起只會導致這個問題。
你能添加源'func',可能涉及到內存泄漏。 –
@AndrewJohnson'func'映射到一個C++函數:'func1','func2'或'func3'。 – 01zhou