ubuntu 16.04 编译 opencv_contrib 3.4, nonfree

版权声明:转载注明出处 http://blog.csdn.net/Real_Myth,如果发现有未完成的文章,请及时留言告知 https://blog.csdn.net/Real_Myth/article/details/82690715

由于专利原因,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以上版本

首先,需要下载和版本一直的 opencvopencv_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目录下的文件的编译出错问题,为了省时间,不做修改,直接删除这些测试用文件

猜你喜欢

转载自blog.csdn.net/Real_Myth/article/details/82690715
今日推荐