Я использую opencv C++ API для приложения для компьютерного зрения, и я управляю матрицами cv :: Mat структурой. Opencv использует ref counting для освобождения созданного объекта как cv :: Mat. Я использую также libshogun для более конкретных алгоритмов машинного обучения. Сёгун имеет собственную структуру матриц SGMatrix. инициализирую SGMatrix от сорта :: Mat так:Матрица (dis) allocation
cv::Mat cvmat(100,100,CV_32FC1,cv::Scalar(0.0));
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols);
Моя проблема, когда я использую другой объект в сёгуна Lib как:
CSimpleFeatures<float>* features = new CSimpleFeatures<float>(sgmatrix);
где сёгун должен теперь владеть матрицу, созданную с features
, я получаю сообщение об ошибке во время выполнения, когда opencv пытается освободить cvmat
, который уже выпущен сёгуном. Как я могу справиться с этим? Я не хочу клонировать мою матрицу.
Примечание. Я попытался добавить ref к объекту cvmat, но получил ту же ошибку. От сёгуна, а не от opencv. *** обнаружено glibc ***/home/eric/dev/(...): double free или коррупция (out): 0x0000000000a2f1c0 *** ======= Backtrace: ======== = /usr/local/lib/libshogun.so.12 – Eric