OpenCV смешивает IplImage с cv :: Mat

Я испытал некоторые неоднозначности управления памятью с opencv. Вы можете сделать это с новыми классами opencv c ++:

cv::Mat theimage = cvLoadImage("rawimage.pgm",CV_LOAD_IMAGE_ANYDEPTH);

Теперь, что я не понимаю, если я сделаю следующее, я получу ошибку:

theimage.deallocate();

возможно это не так. Я провел несколько экспериментов и когда я выпускаю объект Mat:

theimage.release();

объект IplImage все еще остается в памяти. Есть ли какой-нибудь способ сказать объекту cv :: Mat уничтожить объект IplImage или моя первая строка кода неверна (так как там я потерял указатель на объект IplImage)? Я видел много примеров в интернете, где люди используют первую строку кода. Многие объясняют, как конвертировать, но никто не объясняет, что происходит с памятью!

Проблема в том, что у меня есть много классов, которые используют объект IplImage (я начал свой проект, используя это). И я понимаю, почему cv :: Mat лучше, чем IplImage.

--РЕДАКТИРОВАТЬ--

В интернете я нашел следующее решение для микширования:

cv::Ptr<IplImage> tmp = cvLoadImage("rawimage.pgm",CV_LOAD_IMAGE_ANYDEPTH);
cv::Mat theimage(tmp);

Я думаю, что это может решить некоторые из моих проблем, но делает мой код немного нечитаемым и, на мой взгляд, все еще опасно. Если tmp будет освобожден до cv :: Mat, я буду использовать некоторые поврежденные объекты (я не проверял это, но думаю, что это так). Самый простой способ - использовать копию:

cv::Mat theimage(tmp,true);

это единственное решение, которое я нашел, но для меня это неправильно ...

Ответы на вопрос(1)

Ваш ответ на вопрос