0

opencv4android (NDK) ライブラリを使用したモバイル プロジェクトに取り組んでいました。コードはバージョン 2.3.1 で正常に動作します。ライブラリをバージョン 2.4.2 に更新した後、次の行が原因で予期しないエラーが発生しました。

projectPoints( (cv::Mat)obj_cube, rvec, tvec, K, Z, scene_cube );

エラー情報:

jni/libs/libopencv_calib3d.a(calibration.cpp.o): In function `icvGetRectangles(CvMat const*, CvMat const*, CvMat const*, CvMat const*, CvSize, cv::Rect_<float>&, cv::Rect_<float>&)':
calibration.cpp:(.text._ZL16icvGetRectanglesPK5CvMatS1_S1_S1_6CvSizeRN2cv5Rect_IfEES6_+0x11c): undefined reference to `cvUndistortPoints'
make[1]: Leaving directory `/Users/huidong/Documents/workspace/com.qualcomm.fastcorner.SplashScreen'
jni/libs/libopencv_calib3d.a(calibration.cpp.o): In function `cvStereoRectify':
calibration.cpp:(.text.cvStereoRectify+0x59e): undefined reference to `cvUndistortPoints'
jni/libs/libopencv_calib3d.a(calibration.cpp.o): In function `cv::rectify3Collinear(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::Size_<int>, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, double, cv::Size_<int>, cv::Rect_<int>*, cv::Rect_<int>*, int)':
calibration.cpp:(.text._ZN2cv17rectify3CollinearERKNS_11_InputArrayES2_S2_S2_S2_S2_S2_S2_NS_5Size_IiEES2_S2_S2_S2_RKNS_12_OutputArrayES7_S7_S7_S7_S7_S7_dS4_PNS_5Rect_IiEESA_i+0xda2): undefined reference to `cv::undistortPoints(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&)'
calibration.cpp:(.text._ZN2cv17rectify3CollinearERKNS_11_InputArrayES2_S2_S2_S2_S2_S2_S2_NS_5Size_IiEES2_S2_S2_S2_RKNS_12_OutputArrayES7_S7_S7_S7_S7_S7_dS4_PNS_5Rect_IiEESA_i+0xe2a): undefined reference to `cv::undistortPoints(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&)'
jni/libs/libopencv_calib3d.a(calibration.cpp.o): In function `cvFindExtrinsicCameraParams2':
calibration.cpp:(.text.cvFindExtrinsicCameraParams2+0x89e): undefined reference to `cvUndistortPoints'
collect2: ld returned 1 exit status
make[1]: [obj/local/armeabi-v7a/libfastcvsample.so] Error 1
make: [all] Error 2

主な問題は次のとおりです。

calibration.cpp: undefined reference to 'cvUndistortPoints'

projectPoints 関数をコメントすると、エラーが消えます。すべてのopencvライブラリを追加しました。
新しいバージョンでまだ何かまたはいくつかのバグを見逃していましたか?

4

1 に答える 1

0

のメソッド シグネチャがcvUndistortPointsありません。更新により、依存関係が確実に壊れました。

複数の理由が考えられます。

  • メソッドの名前が変更された (可能性は低い)
  • 新しい機能を追加するためにメソッド シグネチャが変更された (可能性が高い) (この場合、メソッドは別のメソッドから参照されているため、別の更新を待つ必要があります)
  • メソッドを含む共有ライブラリが移動され (おそらく)、メソッドを含まないライブラリに対してリンクしています (本当にすべてのライブラリを追加していますか?)

メソッドのシグネチャが次のとおりかどうかを確認します。

 cv::undistortPoints(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&)

参照ドキュメント (更新のアーカイブ/ドキュメント内) を参照するか、それが含まれているはずのライブラリを覗いて (UNIX の場合nm、潜在的な候補ライブラリに対してツールを使用するなどして) まだ存在します。

cd /PATH_TO_YOUR_OPENCV_LIBS_INSTALL
nm libopencv_calib3d.so (find out which library is supposed to have the signature)
于 2012-10-11T13:36:50.510 に答える