Ubuntu 16.04 操作系统上 OpenCV 3.3 的安装

本文提供了一份详细的指南,教你如何在Ubuntu16.04上从源码安装OpenCV3.3。包括安装所需依赖、编译配置及常见问题的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ubuntu 16.04 操作系统上 OpenCV 3.3 的安装

文件准备

  • opencv-3.3.1.zip
  • opencv_contrib-3.3.1.zip

准备

如果遇到OpenCV无法打开视频或RTSP流的情况,请参考https://stackoverflow.com/questions/41200201/opencv-unable-to-stop-the-stream-inappropriate-ioctl-for-device

安装以下依赖项:

sudo apt-get install build-essential 

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 

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 

sudo apt-get install pkg-config

编译

1. 解压zip文件

sudo unzip opencv-3.3.1.zip

sudo unzip opencv_contrib-3.3.1.zip

2. 解压完后需要将opencv_contrib.zip提取到opencv目录下,同时在该目录下新建一个文件夹build:

sudo cp -r opencv_contrib-3.3.1 opencv-3.3.1 #复制opencv_contrib到opencv目录下 cd opencv-3.3.1 

sudo mkdir build #新建文件夹build

3. 现在进入到opencv-3.3.1目录下,查看文件结构:

ls 

3rdparty 	cmake 				data 		LICENSE 				platforms 
apps 		CMakeLists.txt 		doc 		modules 				README.md 
build 		CONTRIBUTING.md 	include 	opencv_contrib-3.3.1 	samples

4. 进入build目录,并且执行cmake生成makefile文件:

cd build 

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D 	OPENCV_EXTRA_MODULES_PATH=/home/files/opencv-3.3.1/opencv_contrib-3.3.1/modules/ .. 

如果安装的是CUDA 10及以上,需要如下操作,将-D BUILD_opencv_cudacodec=OFF:

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_cudacodec=OFF -D 	OPENCV_EXTRA_MODULES_PATH=/home/files/OpenCV3/opencv_contrib-3.3.1/modules/ .. 

注意:OPENCV_EXTRA_MODULES_PATH 就是你 opencv_contrib-3.3.1下面的modules目录,请按照自己的实际目录修改地址。还有后面的两点不可省略!!

接下来就是漫长的等待了…

生成完毕提示:

-- Install path: /usr/local 
-- 
-- cvconfig.h is in: /home/files/opencv-3.3.1/build 
-- ----------------------------------------------------------------- 
-- 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/files/opencv-3.3.1/build

5.在cmake成功之后,就可以在build文件下make了:

sudo make -j8    	#8线程编译

sudo make install

接下来就是更漫长的等待了…具体时间因人而异,我的电脑跑了20分钟。如果看到下图,说明成功了,再make install就ok了!

6.链接库共享

编译安装完毕之后,为了让你的链接库被系统共享,让编译器发现,需要执行管理命令ldconfig:

sudo ldconfig -v  

测试

如果以上步骤没有报错,OpenCV3.3应该就安装成功了,但是为了确认一下,我们可以写一个简单的程序来测试一下。

  • 在 OpenCV3.3.1的目录下,创建一个新的文件夹,然后进去:
mkdir DisplayImage

cd DisplayImage
  • 在这个文件夹里新建两个文件CMakeLists.txt和DisplayImage.cpp,以及一个文件夹build:
mkdir build

vim DisplayImage.cpp
  • 在DisplayImage.cpp中输入以下代码:
#include <stdio.h>
#include <opencv2/opencv.hpp>
//using namespace std;

using namespace cv;

int main(){
	Mat image;
	image = imread("./test.jpg", CV_LOAD_IMAGE_UNCHANGED);
	if(!image.data){
		printf("No image data! \n");
		return -1;
	}else{
		printf("Image Displayed! \n");
	}
	namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
	imshow("Display Image", image);
	cv::waitKey(0);
	getchar();
	return 0;
}
  • 然后保存退出,再创建CMakeLists.txt
vim CMakeLists.txt
  • 在 CMakeLists.txt 里面输入以下内容:
cmake_minimum_required(VERSION 2.8)
project(DisplayImage)
find_package(OpenCV REQUIRED)
add_executable(DisplayImage DisplayImage.cpp)
target_link_libraries(DisplayImage ${OpenCV_LIBS})
  • 保存退出后,进入build文件夹
cd build

cmake ..

make
  • 即可编译通过,然后将一张图片放入build文件夹下,运行DisplayImage可执行文件
./DisplayImage
  • 即可显示那张图片,这就说明OpenCV3.3安装成功了!

可能遇到的问题

1. 多个版本的OpenCV

如果系统安装了多个版本的OpenCV,比如OpenCV2.4和OpenCV3.3,OpenCV的安装会通过,但是如果要安装其它依赖于某个版本的OpenCV的工程时,如Caffe,它就会报错。这时候的解决办法就是:

  • 删除不需要的OpenCV版本

  • CMake下指定OpenCV版本

关键文件:OpenCVConfig.cmake。在OpenCV编译好后,所在目录中一般会有一个叫OpenCVConfig.cmake的文件,这个文件指定了CMake要去哪里找OpenCV,其头文件在哪里等,比如其中一行:

# Provide the include directories to the caller

set(OpenCV_INCLUDE_DIRS "/home/ubuntu/src/opencv-3.1.0/build" "/home/ubuntu/src/opencv-3.1.0/include" "/home/ubuntu/src/opencv-3.1.0/include/opencv")

只要让CMake找到这个文件,这个文件就指定了Opencv的所有路径,因此设置OpenCV_DIR为包含OpenCVConfig.cmake的目录,如在我的C++工程CMakeLists.txt中添加

set(OpenCV_DIR "/home/ubuntu/src/opencv-3.1.0/build")

我的OpenCVConfig.cmake在

/home/ubuntu/src/opencv-3.1.0/build

注意,将其添加在project(MyProjectName)之前。

如CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 2.8)
set(OpenCV_DIR "/home/ubuntu/src/opencv-3.1.0/build")
project( camera )
find_package( OpenCV REQUIRED )
add_executable( camera camera.cpp )
target_link_libraries( camera ${OpenCV_LIBS} )

因此,我们期望使用哪个版本的Opencv,只要找到对应的OpenCVConfig.cmake文件,并且将其路径添加到工程的CMakeLists.txt中即可了。

此问题的其它解决办法可参考:https://www.cnblogs.com/xzd1575/p/5555523.html

2. Eigen 错误

如果开启Eigen,可能会遇到如下错误:

...opencv_contrib/modules/rgbd/src/odometry.cpp:21:12: fatal error: unsupported/Eigen/MatrixFunctions: No such file or directory
 #  include <unsupported/Eigen/MatrixFunctions>^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决方案是将对应的文件夹复制到/usr/include/下,举例Eigen安装到了/usr/include/eigen3/,则执行:

cd /usr/include/eigen3/
sudo cp -r unsupported/ ..
sudo cp -r Eigen/ ..

3. Could NOT find CUDA

重装了一次系统,但是原来的一些软件可能没有卸载干净,比如以前安装的是cuda8.0+opencv3.4.1,新装的是cuda9.0+opencv3.4.1,这里不介绍opencv3.4.1,只讲cmake遇到的一些问题

cmake链接opencv时,在这一步遇到Could NOT find CUDA: Found unsuitable version “8.0”, but required is exact version “9.0” (found /usr/local/cuda)

find_package(OpenCV REQUIRED)

应该是系统还是认为是cuda8.0,但其实我已经装的是9.0的版本, 在终端 nvcc-V的时候也是9.0版本,而且我移除了所有8.0的文件夹,但还是cmake发现不了 cuda-9.0.

opencv重装,环境变量设置等等等等但仍然解决不了。

解决方案:

mkdir build
# cmake .. 一般会这样,但没有这样
cmake -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 .. #ok编译成功,需要指定一下cuda路径

原理:

原理转自 http://www.it1352.com/344521.html:

cmake的提到 CUDA_TOOLKIT_ROOT_DIR 作为CMake的变量,而不是环境之一。这就是为什么当你把它变成的.bashrc不工作。如果你看看FindCUDA.cmake它清楚地说:
该脚本会提示用户指定CUDA_TOOLKIT_ROOT_DIR如果preFIX
不能NVCC的位置,在系统路径和要求的确定
被指定到find_package()。要使用的不同的安装版本
工具箱设置环境变量CUDA_BIN_PATH运行cmake的前
(例如CUDA_BIN_PATH =的/ usr /本地/ cuda1.0而不是默认的/ usr /本地/ CUDA)
或配置之后设置CUDA_TOOLKIT_ROOT_DIR。如果更改的值
CUDA_TOOLKIT_ROOT_DIR,依赖路径上的各种组件将
搬迁。

所以把 CUDA_BIN_PATH 到.bashrc或者指定 CUDA_TOOLKIT_ROOT_DIR 来cmake的:
http://www.it1352.com/344521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值