搜索
您的当前位置:首页正文

opencv库与opencv_contrib配置编译过程报错记录及解决

来源:步旅网

配置过程:

$ cd <opencv_directory>
$ mkdir build
$ cd build 
$ cmake .. -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_directory>/build -DOPENCV_ENABLE_NONFREE=ON
$ make -j12

note:

其中-DOPENCV_EXTRA_MODULES_PATH参数为本地拓展库路径(opencv_contrib),其中-DOPENCV_ENABLE_NONFREE参数表示是否使用SURF等申请专利算法。

ref:

报错1:

编译过程中错误

/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

报错2:

/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

报错3:

/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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top