$ cd <opencv_directory>
$ mkdir build
$ cd build
$ cmake .. -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_directory>/build -DOPENCV_ENABLE_NONFREE=ON
$ make -j12
其中-DOPENCV_EXTRA_MODULES_PATH
参数为本地拓展库路径(opencv_contrib),其中-DOPENCV_ENABLE_NONFREE
参数表示是否使用SURF等申请专利算法。
ref:
编译过程中错误
/home/wyx/Mylib/opencv_contrib/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc: In function ‘void libmv::EuclideanBundleCommonIntrinsics(const libmv::Tracks&, int, int, libmv::EuclideanReconstruction*, libmv::CameraIntrinsics*, libmv::BundleEvaluation*)’:
/home/wyx/Mylib/opencv_contrib/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc:553:37: error: cannot convert ‘ceres::SubsetManifold*’ to ‘ceres::LocalParameterization*’
错误原因:ceres库版本不符,使用版本为2.2.0
解决方法:更换ceres-2.0.0
/home/wyx/Mylib/opencv_contrib/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc: In function ‘void libmv::EuclideanBundleCommonIntrinsics(const libmv::Tracks&, int, int, libmv::EuclideanReconstruction*, libmv::CameraIntrinsics*, libmv::BundleEvaluation*)’:
/home/wyx/Mylib/opencv_contrib/modules/sfm/src/libmv_light/libmv/simple_pipeline/bundle.cc:552:17: error: ‘class ceres::Problem’ has no member named ‘SetParameterization’; did you mean ‘SetParameterLowerBound’?
错误原因:ceres库版本不符,使用版本为2.1.0
解决方法:更换ceres-2.0.0
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:22:48: error: ‘VTraits’ was not declared in this scope
const uint32_t v_float32_max_width = (uint32_t)VTraits<v_float32>::max_nlanes;
^~~~~~~
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:22:65: error: expected primary-expression before ‘>’ token
const uint32_t v_float32_max_width = (uint32_t)VTraits<v_float32>::max_nlanes;
^
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:22:68: error: ‘::max_nlanes’ has not been declared
const uint32_t v_float32_max_width = (uint32_t)VTraits<v_float32>::max_nlanes;
^~~~~~~~~~
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:22:68: note: suggested alternative: ‘max_align_t’
const uint32_t v_float32_max_width = (uint32_t)VTraits<v_float32>::max_nlanes;
^~~~~~~~~~
max_align_t
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp: In function ‘cv::hal_baseline::simd128_cpp::v_float32 cv::signal::simd_cubicHermite(const v_float32&, const v_float32&, const v_float32&, const v_float32&, const v_float32&)’:
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:98:25: error: ‘v_sub’ was not declared in this scope
v_float32 v_inv_A = v_sub(v_zero, v_A);
^~~~~
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:100:53: error: ‘v_add’ was not declared in this scope
v_float32 v_a = v_mul(v_sub(v_fma(v_three, v_B, v_add(v_inv_A, v_D)), v_mul(v_three, v_C)), v_half);
^~~~~
/home/ubuntu/opencv-4.5.4/opencv_contrib-4.x/modules/signal/src/signal_resample.cpp:100:53: note: suggested alternative: ‘v_a’
v_float32 v_a = v_mul(v_sub(v_fma(v_three, v_B, v_add(v_inv_A, v_D)), v_mul(v_three, v_C)), v_half);
^~~~~
v_a
问题原因:opencv_contrib库中opencv库版本设置与安装的版本不符合
解决方法:
$ cd opencv_contrib
$ git checkout 4.6.0
$ git reset --hard
ref:
最终环境版本:
opencv 4.6.0
eigen 3.3.9
ceres 2.0.0
opencv_contrib 4.x
因篇幅问题不能全部显示,请点此查看更多更全内容