OpenCV cv::Mat
オブジェクトをEigen::Matrix
に変換する可逆な方法はありますか?OpenCV CV :: MatとEigen :: Matrix
例えば、やっていくつかの方法:
cv::Mat cvMat;
Eigen::Matrix eigMat;
camera->retrieve(cvMat);
// magic to convert cvMat to eigMat
// work on eigMat
// convert eigMat back to cvMat
imshow("Image", cvMat);
私はcv2eigen
とeigen2cv
が、結果cvMat
を使用してみましたが、完全にマングルされたと私は、なぜ正確にはわかりません。ディメンションは正しいですが、グラフィックスは完全にゴミ箱になります。つまり、ピクセルあたりのバイト数またはデータサイズの問題でしょうか?
完璧な、それは私が探していたものです。マルチチャンネル画像(RGB、YUV、またはその他のチャンネルの組み合わせ)を使用する場合は、どのように変換するのが最適でしょうか?チャネルごとに別々のマトリックス? widthXheightXchannelsの3Dマトリックスに?または、幅(幅* 3)*高さで拡大しますか? – Yeraze
マルチチャンネル画像は、通常、インターリーブされた配列(例えば、RGBRGBRGB ...)として格納される。あなたがそれらで何をしたいかに応じて、各シングルチャンネルをストライドパラメータを利用する別のEigen :: Mapにマッピングすることを検討するかもしれません: 'cv :: Mat cvT(4,4、CV_32FC3); // 3チャネル浮動行列 Eigen :: Map>赤(cvT.data); Eigen :: Map >緑色(cvT.data +1); Eigen :: Map > blue(cvT.data +2); ' –
Pierluigi
cvT.data()を使用しても動作しません。コンパイラエラーが発生します。私は、任意のサイズの行列に対してやEigenからOpenCVへの逆変換を行う方法についての情報を含め、私が下でどのように行うかに関する答えを投稿しました。 – Ela782