由于专利原因,3.0以后,opencv中的某些功能做了默认的剔除,如果需要安装需要自己单独编译。
Part I 3.0 以下版本
对于低版本的比如2.4.x, ubuntu 下可以直接安装,方法如下:
sudo apt-get update
sudo add-apt-repository --yes ppa:xqms/opencv-nonfree
sudo apt-get update
sudo apt-get install libopencv-nonfree-dev
也可参见: Ubuntu 安装 opencv-nonfree
Part II 3.0以上版本
首先,需要下载和版本一直的 opencv 和opencv_contrib
其次使用cmake-gui, 工具生成Makefile
编译opencv_contrib需要配置两个变量,如下图
然后,执行Configure和Generate
Part III 遇到的问题
问题1
Cmake error at
opencv_contrib-master/modules/datasets/CMakeLists.txt:5 (ocv_append_source_files_cxx_compiler_options):
Unknown CMake command “ocv_append_source_files_cxx_compiler_options”.
解决方法:
注释掉下面这行(文件中行号5)
opencv_contrib-master/modules/datasets/CMakeLists.txt:5 (ocv_append_source_files_cxx_compiler_options):
也就是不执行这个没有定义的命令
问题2
CV_OVERRIDE 不识别
解决方法:
全部替换成 override
问题 3
CV_FINAL不识别
解决方法:
全部替换成 final
问题4
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp: In member function ‘virtual const cv::Mat cv::bioinspired::ocl::RetinaOCLImpl::getMagnoRAW() const’:
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp:451:65: error: no return statement in function returning non-void [-Werror=return-type]
const Mat RetinaOCLImpl::getMagnoRAW() const { NOT_IMPLEMENTED; }
^
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp: In member function ‘virtual const cv::Mat cv::bioinspired::ocl::RetinaOCLImpl::getParvoRAW() const’:
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp:452:65: error: no return statement in function returning non-void [-Werror=return-type]
const Mat RetinaOCLImpl::getParvoRAW() const { NOT_IMPLEMENTED; }
^
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp: In member function ‘bool cv::bioinspired::ocl::RetinaOCLImpl::convertToColorPlanes(const cv::UMat&, cv::UMat&)’:
opencv-3.4.0/opencv_contrib/modules/bioinspired/src/retina_ocl.cpp:395:1: error: control reaches end of non-void function [-Werror=return-type]
解决方法:
395行那个
在最后一个else分之后改为
CV_Error(-1, “Retina ocl only support 1, 3, 4 channel input”);
return false;451和452行,函数没有实现导致的
const Mat RetinaOCLImpl::getMagnoRAW() const { NOT_IMPLEMENTED; return Mat();}
const Mat RetinaOCLImpl::getParvoRAW() const { NOT_IMPLEMENTED; eturn Mat();}
问题5
其他test目录下的文件的编译出错问题,为了省时间,不做修改,直接删除这些测试用文件