コンピューター ビジョン アプリケーションに opencv c++ API を使用し、cv::Mat 構造で行列を管理します。Opencv は参照カウントを使用して、作成されたオブジェクトを cv::Mat として解放します。より具体的な機械学習アルゴリズムには libshogun も使用します。Shogun には、SGMatrix と呼ばれる独自の行列構造があります。次のように cv::Mat から SGMatrix を初期化します。
cv::Mat cvmat(100,100,CV_32FC1,cv::Scalar(0.0));
SGMatrix<float> sgmatrix((float*)cvmat.data, cvmat.rows, cvmat.cols);
私の問題は、shogun lib で次のような別のオブジェクトを使用する場合です。
CSimpleFeatures<float>* features = new CSimpleFeatures<float>(sgmatrix);
ここで、shogun は で作成されたマトリックスを所有することになっていますが、実行時に、 shogun によって既にリリースされているものをfeatures
opencv がリリースしようとすると、エラーが発生します。cvmat
どうすればこれを処理できますか? マトリックスを複製したくありません。