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);
это единственное решение, которое я нашел, но для меня это неправильно ...