Ubuntu环境下 OpenCV和OpenCV_Contrib的配置

Ubuntu下 OpenCV3.4.1和OpenCV_Contrib3.4.1的配置

说明

  • 目前OpenCV4官方版本已经更新到了4.4.0版,OpenCV3也已经更新到了3.4.11,但理论OpenCV3各个版本的配置方法相同,下面以3.4.1为例配置;

  • 许多项目由于要使用一些OpenCV中已经集成到contrib中的模块,所以需要重新编译OpenCV和OpenCV_Contrib,之前安装配置一直没有记录,这次特意记录便于后续使用,供大家参考,如有纰漏或问题,欢迎留言。

  • 但务必注意,两者版本必须保持一致。


一、下载

  1. 可以直接在官网、GitHub进行下载对应版本的Sources:

    官网下载链接

    GitHub链接

  2. 由于官网下载速度过慢,给出百度云链接,附一些教程书籍(提取码: gq39):

    百度云链接,包含一些OpenCV教程书籍


二、安装

2.1 各种依赖包安装

sudo apt-get install pkg-config
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev qt5-default
sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev  libgphoto2-dev libopenblas-base libopenblas-dev doxygen  openjdk-8-jdk pylint libvtk6-dev

在这里插入图片描述

2.2 编译前准备

1、解压:

​ 直接将两个包解压:

sudo unzip opencv-3.4.1.zip
sudo unzip opencv_contrib-3.4.1.zip
2、构建目录结构

​ 将opencv_contirb放入opencv目录:

sudo cp -r opencv_contrib-3.4.1 opencv-3.4.1 

​ 进入opencv-3.4.1目录下,新建build文件夹,使用cmake生成makefile:

cd opencv-3.4.1
sudo mkdir build && cd build

​ 确保你的opencv-3.4.1目录如下所示:
在这里插入图片描述

2.3 编译安装

1、生成makefile文件

​ 在build目录下,使用cmake生成Makefile:

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/rjj/文档/opencv-3.4.1/opencv_contrib-3.4.1/modules/ ..
sudo cmake -DENABLE_PRECOMPILED_HEADERS=OFF -D CMAKE_BUILD_TYPE=Release -DBUILD_TIFF=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/rjj/文档/opencv-3.4.1/opencv_contrib-3.4.1/modules/ ..

注意:OPENCV_EXTRA_MODULES_PATH是你自己opencv_contrib-3.4.1下面的modules目录,务必进行修改后在执行,下图给出一个例子:
在这里插入图片描述

​ 即OPENCV_EXTRA_MODULES_PATH=/home/rjj/文档/opencv-3.4.1/opencv_contrib-3.4.1/modules … ,两点不能省略

​ 经过一段时间后生成完毕,提示如下:
在这里插入图片描述

2、编译

​ Makefile成功生成后,使用make在build下直接编译:

sudo make 
#sudo make -j8    	#可以使用多线程编译,加快速度

​ 编译需要更长一段时间(我自己在15分钟左右,如果中间中断,可以多次执行),成功后提示:
在这里插入图片描述

​ 然后进行安装即可:

sudo make install

2.4 链接库共享

​ 为了让编译器发现你的OpenCV库,需要执行:

sudo ldconfig -v  

在这里插入图片描述
​ 至此,安装全部结束。


三、测试

3.1 使用OpenCV官方测试程序测试

​ 进入如下目录:/home/rjj/文档/opencv-3.4.1/samples/cpp/example_cmake,执行以下命令:

cd /home/rjj/文档/opencv-3.4.1/samples/cpp/example_cmake
sudo mkdir build && cd build	# 建立编译build文件夹
sudo cmake ..				   # 生成makefile文件
sudo make					  # 编译生成目标文件opencv_example

​ 该程序会自动打开摄像头,并在图像左上角显示Hello OpenCV字样,出现下图即说明安装成功:
在这里插入图片描述

3.2 测试opencv_contirb模块

​ 这里我们直接使用opencv训练好的人脸、人眼分类器进行检测。

  1. 新建main.cpp,复制如下程序:
#include<iostream>
#include<string>
#include<opencv2/opencv.hpp>
#include<opencv2/calib3d/calib3d.hpp>

using namespace std;
using namespace cv;

int main() {
	Mat image_src, image_gray;
	VideoCapture capture(0);

	while (1) {
		capture >> image_src;
		
		cvtColor(image_src, image_gray, CV_BGR2GRAY);
		equalizeHist(image_gray, image_gray);	//直方图均衡化,增加对比度
		
		String face_cascade_name = "../haarcascade_frontalface_alt.xml";
		String eyes_cascade_name = "../haarcascade_eye.xml";
		
		CascadeClassifier face_cascade, eyes_cascade;	//载入分类器

		if (!face_cascade.load(face_cascade_name)) {	//加载脸部分类器失败
			cout << "Load haarcascade_face.xml failed!" << endl;
			return 0;
		}

		if (!eyes_cascade.load(eyes_cascade_name)) {	//加载眼部分类器失败
			cout << "Load haarcascade_eye.xml failed!" << endl;
			return 0;
		}

		vector<Rect> eyeRect;
		vector<Rect> faceRect;
		//检测关于眼睛部位位置
		eyes_cascade.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));//检测
		for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++)
		{
			rectangle(image_src, eyeRect[eyeIdx], Scalar(0, 0, 255));   //用矩形画出检测到的位置
		}
		
		//检测关于脸部位置
		face_cascade.detectMultiScale(	image_gray, faceRect, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));//检测
		for (size_t i = 0; i < faceRect.size(); i++)
		{
			rectangle(image_src, faceRect[i], Scalar(0, 0, 255));      //用矩形画出检测到的位置
		}
		
		imshow("Image recognition", image_src);         //显示当前帧
		/*char c = waitKey(30);         //延时30ms,即每秒播放33帧图像
		if (c == 27)  break;*/
		waitKey(20);

	}	

	return 0;
}
  1. 新建CMakeLists.txt,内容如下:
project(face_v1.0)
cmake_minimum_required(VERSION 3.0)

find_package(OpenCV REQUIRED)
add_executable(face_v1.0 main.cpp)
target_link_libraries(face_v1.0 ${OpenCV_LIBS})
  1. 将下载好的两个.xml文件复制进去:

    [百度云链接,包含一些OpenCV教程书籍](https://pan.baidu.com/s/13OPHO6GA4fmwg8JZgay49Q 密码: gq39")

  2. 现在你的文件夹应该如下所示:
    在这里插入图片描述

  3. 编译执行:

    执行如下命令:

    mkdir build && cd build		# 建立编译build文件夹
    cmake ..				   # 生成makefile文件
    make					   # 编译生成目标文件face_v1.0	
    ./face_v1.0				   # 运行目标文件
    

在这里插入图片描述

​ 程序会自动打开摄像头,并标注人脸、人眼位置,此时说明opencv_contrib模块中功能基本正常,至此,所有安装测试均已完成。改程序结果如下所示:

在这里插入图片描述


四:常见错误记录

1.、编译OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件

在这里插入图片描述

解决方案

​ 查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中搜索 boostdesc_bgm.i 关键词。日志文件里就有它的下载地址,到指定位置下载即可。https://github.com/opencv/opencv_contrib/issues/1301,点开上面这个网址往下拉,有人提供了缺失的各个文件的链接,点击保存. 或者直接在这个网页里搜索 BenbenIO 这个用户的回答。

​ 或者到本文提供的下载镜像去下载:boostdesc_bgm.i,vgg_generated_48.i等.rar

​ 下载后,直接拷贝源码并生存同名文件,放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可。

2、在编译stitching模块时会提示找不到cuda.hpp

​ 有什么还能比情况更让人心碎,漫长的等待,99%那一刻出现错误!往上翻还是xfeatures2d缺少文件,太难了。

在这里插入图片描述

在这里插入图片描述

解决方案

​ 解决方法是在opencv/modules/stitching/CMakeLists.txt文件中加入一条语句使其include opencv_contrib/modules/xfeatures2d/include,可以是绝对路径,如

​ INCLUDE_DIRECTORIES("/home/rjj/文档/opencv-3.4.1/opencv_contrib-3.4.1/modules/xfeatures2d/include")

​ **注意:**出现上述1、2问题需要重头开始编译安装。。。

3、运行程序,出现Failed to load module "canberra-gtk-module"错误

sudo apt-get install libcanberra-gtk-module

附录 :CmakeLists.txt的一般写法

cmake_minimum_required(VERSION 2.0)		#指定cmake版本 
project(face_6.0)				#指定项目的名称,一般和项目的文件夹名称对应

set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread")

#指定头文件目录
include_directories(./)	
include_directories(./inc)
 
#指定静态和动态文件目录
link_directories(../linux_so)
#
find_package(OpenCV REQUIRED)

#该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。
#arcsoft_face生成的库文件名		[STATIC | SHARED | MODULE] 库类型
add_executable(face_6.0
    ./inc/amcomdef.h
    ./inc/arcsoft_face_sdk.h
    ./inc/asvloffscreen.h
    ./inc/merror.h

    ./master.cpp
    ./face_Factory.cpp
    ./face_Factory.hpp

    ./LinuxSerial.cpp
    ./LinuxSerial.hpp
)

#在给定的作用域内设置一个命名的属性
set_property(TARGET face_6.0 PROPERTY POSITION_INDEPENDENT_CODE ON)


#链接库文件
target_link_libraries(face_6.0	
		arcsoft_face
		arcsoft_face_engine)

target_link_libraries(face_6.0 ${OpenCV_LIBS})

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值