2012-04-30 19 views
6

OpenCV 2.3の最新バージョンをコンパイルしたばかりです。また、Matrixの入出力をすべてInputArray/OutputArrayに変更すると、すべての処理が中断されます。 OpenCV 2.2でうまく機能していたのと同じコードが今では役に立たない。OpenCV InputArray/OutputArray

私は受け入れるだろう2つの解決策があります:私はすべてのモジュールで、Linux用のOpenCV 2.2をダウンロードできる場所

  1. が私を表示、それはステッチが(私は、適切なものを見つけることを試みた欠落していないことが重要ですが、ステッチは常に欠けている!)。

  2. 以下で説明する内容を解決するのに役立ちます。

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

私はこの例外メッセージがあります:GDBで

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 

、これはスタックです:私はCVを呼んでいるとき

#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 

は最終的に、ここに私のコードです:: 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といい記号ではありません!これには回避策が必要です。

答えて

7

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

最も簡単な方法は、他のすべてのOpenCVのバージョンを削除することで、その後の可能な誤ったライブラリー・パスは

(somelib.so行方不明)より明示的であるか、リンカのフラグをすべての設定のPATHを確認するとフォルダが含まれますインクルード/コンパイル/リンク手順で同じバージョンを使用していることを確認してください

+0

ありがとう私は今夜これをチェックしてお知らせします! – widgg

+0

ありがとう、それは図書館の問題を解決しました!私が持っていたOpenCVのすべてのインスタンスを削除し、私が望むバージョンを入れるためにmake installをやっただけです! – widgg

+0

その後、答えを自由に受け入れることができます。 – Sam