6

OpenCV2.3の最後のバージョンをコンパイルしたところです。そして、すべてのMatrix入力/出力をInputArray / OutputArrayに変更するという彼らの決定は、すべてを台無しにします。OpenCV 2.2でうまく機能していた同じコードは、今では価値がありません。

私が受け入れる2つの解決策があります:

  1. Linux用のOpenCV2.2をダウンロードできる場所を示して、すべてのモジュールで、ステッチが欠落していないことが重要です(適切なものを見つけようとしましたが、ステッチは常に欠落しています!)。

  2. 以下で説明していることを解決するのを手伝ってください。

  3. OpenCV 2.4は、まだベータ版であっても、これを修正したので、代わりにこのバージョンに移行する必要があります。

この例外メッセージがあります:

OpenCV Error: Assertion failed (k == STD_VECTOR_MAT) in getMat, file /home/widgg/opencv/trunk/modules/core/src/matrix.cpp, line 928
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/widgg/opencv/trunk/modules/core/src/matrix.cpp:928: error: (-215) k == STD_VECTOR_MAT in function getMat

gdbでは、これはスタックです。

#0  0x00007ffff5df3445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff5df6bab in __GI_abort () at abort.c:91
#2  0x00007ffff674169d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff673f846 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff673f873 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff673f96e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff77fca51 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.3
#7  0x00007ffff791306d in cv::_InputArray::getMat(int) const () from /usr/local/lib/libopencv_core.so.2.3
#8  0x00007ffff796064c in cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_core.so.2.3

最後に、cv::perspectiveTransformを呼び出しているときのコードを次に示します。

std::vector<cv::Point2f> corners(4);

cv::Mat cur_image = imread("my_image.jpg");

std::vector<cv::Point2f> img_corners(4);

img_corners[0] = cv::Point2f(0, 0);

img_corners[1] = cv::Point2f(cur_image.cols, 0);

img_corners[2] = cv::Point2f(cur_image.cols, cur_image.rows);

img_corners[3] = cv::Point2f(0, cur_image.rows);

cur_image.release();

cv::perspectiveTransform(img_corners, corners, m_transf);

そしてcv::Mat m_transf =(Mat_ <double>(3,3)<< 1、0、0、0、1、0、0、0、1);、それは最初に使用されたときの値であり、クラッシュしますその場所で!

cv::FindHomographyでも同様の問題があります。昨日はコードが正しく実行されていましたが、今ではこのInputArray/OuputArrayがすべてを台無しにしています。

とても迷惑です、助けてください!

また、私はここでこのレポートを見つけました:OpenCV 2.2 Vs. 2.3そしてそれは良い兆候ではありません!これには回避策があるはずです!

4

1 に答える 1

7

OpenCVの2つのバージョンがインストールされているようで、リンカはコードのコンパイルに使用されたものとは異なるバージョンをリンクに使用しようとします。

最も簡単な方法は、他のすべてのOpenCVバージョンを削除することです。そうすると、間違っている可能性のあるライブラリパスがより明確になります(somelib.soがありません)

または、すべての設定PATH、リンカーフラグ、およびインクルードフォルダーをチェックして、インクルード/コンパイル/リンクの手順で同じバージョンを使用していることを確認します。

于 2012-04-30T07:52:36.757 に答える