2016-10-06 5 views
1

は、私が持っていると言う:鋳造固有::マトリックスにCV ::マット間マトリックスと

Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> someMatrixEigen = someMatrix();

IがCV ::(タイプCV_8U付き)マットヘッダを作成した場合、私ができなければなりませんこれを行うには、右か?私はcv::Mat anotherMatrixOCVを持っている場合

cv::Mat someMatrixOCV(someMatrixEigen.rows(), someMatrixEigen.cols(), CV_8U, someMatrixEigen.data());

その後、バック固有値に行くために、これはあまりにも動作するはず?

Eigen::Map<Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> > anotherMatrixEigen(anotherMatrixOCV.ptr<int>(), anotherMatrixOCV.rows, anotherMatrixOCV.cols);

は、ここでは整数型互換性がありますか?私はfloatとCV_32Fを使用するとこれを動作させることができるようですが、整数バージョンは動作しないようです(segfault)。

答えて

0

CV_8Uあなたマトリックス署名intタイプ(コンパイラに依存するが、8つ以上のビット数)であるのに対し、符号なしのタイプ(具体的には、8ビット、例えばunsigned char)であるように思われます。変換にはCV_32S、またはEigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>を試してみてください。

+0

CV_8Uは型ではなく、#define CV_8U 0'を定義します。 ( 'opencv2/core/cvdef.h')。テンプレートの場合、実際の型が必要です。この場合、 'unsigned char'です。 – user1906

+0

@ user1906ありがとうございました。私はあなたの編集を取り入れました。 –