文章目录
一、Ubuntu系统下安装opencv
(一)opencv的安装配置
- 下载opencv
官网地址:https://opencv.org
- 将下载的压缩文件,复制移到home下
- opencv的编译过程
- 解压文件
unzip opencv-4.5.0.zip
- 进入解压的到的文件中
cd opencv-4.5.0
- 安装cmake和一些依赖库(时间可能比较及,大家要耐心一点)
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install 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 libdc1394-22-dev libjasper-dev #可选安装
在安装可选的依赖库,可能遇到下面图片的问题
解决方法:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev #重新执行该命令
其中,一些依赖库是必须需要的,另外的可以根据自己需要进行安装,我这里是选择安装了的。
- 安装cmake后,新建一个编译目录并对其进行配置
mkdir my_built_file
cd my_built_file
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
//cmake进行配置
cmake其他方法安装:
利用cmake gui对opencv进行配置
选择opencv-3.4.10为源码目录
选择刚才新建的release文件夹为编译文件存放目录
点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish
点击Configure,过程中需要下载一些文件,要等待一段时间,然后CMake会载入一些默认配置。
为了防止编译过程中报错:gcc: internal compiler error: Killed (program cc1plus),编译前先配置交换区。原因是我们创建虚拟机的时候运行内存默认只分配了1G,这对于opencv编译可能不够,所以通过配置交换空间解决这个问题。
sudo dd if=/dev/zero of=/swap-file bs=8M count=1024
sudo mkswap /swap-file #格式化 交换分区
sudo swapon /swap-file #挂载
swapon -s #查看
说明:前面cmake的安装选择其中的一种,不过我两种方法都试过,第一种出现错误比较多,我个人更倾向第二种。
- 执行,开始编译(这个过程时间很长,大家可以利用这段时间去做其他的事情,如果遇到问题,记得再次使用这个命令,如果任然有问题,就重新选择下一个opencv的其他版本,此处使用的使opencv-3.4.10)
//可以使用ls查看是否有CMakefile,在执行make
sudo make
- 执行命令,该命令执行完毕后,opencv的编译过程就结束了
sudo make install
- opencv的环境配置
- 添加opencv库的路径
//这里可以利用你熟悉的编辑器
sudo nano /etc/ld.so.conf.d/opencv.conf
添加内容:
//文件可能是一个空文件,不用管这个,直接在文件末尾加上下面的内容就好
/usr/local/lib
保存文件修改,然后执行命令使配置内容生效
sudo ldconfig
- 配置bash
sudo nano /etc/bash.bashrc
添加内容:
//在文件末尾添加下面内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存文件修改,然后执行命令使配置内容生效
source /etc/bash.bashrc
- 更新
sudo updatedb
(二)代码测试
- 代码
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("lena.jpg");
argc == 2? cvLoadImage(argv[1]) : 0;
cvShowImage("Image", image);
if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);
for (int i = 0;i<image->height;i++)
for (int j = 0;j<image->width;j++) {
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dx*dx + dy*dy)*scale);
uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
ptr[0] = cvRound(ptr[0] * weight);
ptr[1] = cvRound(ptr[1] * weight);
ptr[2] = cvRound(ptr[2] * weight);
}
Mat src;Mat dst;
src = cvarrToMat(image);
cv::imwrite("test.png", src);
cvNamedWindow("test",1); imshow("test", src);
cvWaitKey();
return 0;
}
注意:
补全头文件<opencv2.hightgui.cpp><opencv2/opencv.hpp>
图片放在home目录下
-
编译
编译语句:gcc test.cpp -o test `pkg-config --cflags --libs opencv`
编译会出现错误,导致无法得到可执行文件
解决方法:
将gcc修改为g++
修改后的编译语句:g++ test.cpp -o test `pkg-config --cflags --libs opencv`
-
执行
执行语句:./test
运行没有结果的问题,解决方法
将代码中图片的路径补全
运行结果显示
二、Windows安装opencv
(一)opencv安装配置
- 下载opencv
官网地址:https://opencv.org - 配置opencv
①运行opencv
双击下载好的文件,点击Extract,进行提取
提取过程需要一段时间
提取完成后,opencv包含以下文件
②环境变量设置
选择计算机—>属性—>高级系统设置—>环境变量,将opencv的路径添加到Path变量中,路径是打开opencv文件夹后,按照build—>x64—>vc15—>bin打开,得到的路径就是需要添加的路径。
说明:x64文件夹下,一般有多个文件夹,一般选择最新的那一个
③项目opencv配置
软件工具:Visual Studio 2019
新建一个空项目Project2,然后在项目中添加一个test.cpp文件
将Debug模式改为x64
配置属性
项目->属性->VC++目录
包含目录
打开opencv->build->include,得到的路径就是要添加的路径
库目录
打开opencv->build->x64->vc15->lib,得到的路径就是添加的路径
两个目录添加方式操作方式一样
添加完成
添加依赖项
依赖项的查看方法:
打开opencv->build->x64->vc15->lib
添加完成
(二)代码测试
- 代码
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
VideoCapture capture(0);
while (1)
{
Mat frame;
capture >> frame;
imshow("读取视频帧", frame);
waitKey(30);
}
system("pause");
return 0;
}
- 运行
三、树莓派上安装opencv
(一)opencv安装配置
说明:安装配置过程跟在Ubuntu上安装类似
1.下载opencv
官网地址:https://opencv.org
-
更新及工具包的安装
①更新
软件源更新sudo apt-get update
软件更新
sudo apt-get upgrade
树莓派固件更新
sudo rpi-update
②工具安装
安装构建opencv的相关工具sudo apt-get install build-essential cmake git pkg-config
安装 jpeg 格式图像工具包
sudo apt-get install libjpeg8-dev
安装 tif 格式图像工具包
sudo apt-get install libtiff5-dev
安装 jasper 图像工具包
sudo apt-get install libjasper-dev
安装 png 图像工具包
sudo apt-get install libpng12-dev
安装视频 I/O 包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
安装gtk2.0
sudo apt-get install libgtk2.0-dev
优化函数包
sudo apt-get install libatlas-base-dev gfortran
-
配置opencv
解压下载的文件unzip opencv-3.4.10.zip
进入文件
cd opencv-3.4.10
新建一个名为release文件夹
mkdir release
进入文件夹
cd release
cmake一下cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local ..
编译(这个时间很长,需要等待很久,可以利用这一段时间做其他事情。这个过程一定不要碰树莓派,不要断网,不要断电)
sudo make
编译安装sudo make install
更新动态链接库
sudo ldconfig
opencv的安装配置过程就完成了
(二)代码测试
- 代码
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("/home/pi/Downloads/lena.jpg");
argc == 2? cvLoadImage(argv[1]) : 0;
cvShowImage("Image", image);
if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);
for (int i = 0;i<image->height;i++)
for (int j = 0;j<image->width;j++) {
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dx*dx + dy*dy)*scale);
uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
ptr[0] = cvRound(ptr[0] * weight);
ptr[1] = cvRound(ptr[1] * weight);
ptr[2] = cvRound(ptr[2] * weight);
}
Mat src;Mat dst;
src = cvarrToMat(image);
cv::imwrite("test.png", src);
cvNamedWindow("test",1); imshow("test", src);
cvWaitKey();
return 0;
}
-
编译
编译语句:g++ +文件名+ -o+输出文件流名称 + 支持包
g++ opencv_test1.cpp -o opencv_test1 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -loencv_imgcodecs
编译出现问题:
这个问题应该是头文件的路径问题,我找了发现没有这个文件,可能是opencv安装过程出现了什么问题。
四、小结
本文章是对opencv的安装,分别在Windows,Ubuntu,树莓派上进行安装。其中,Ubuntu与树莓派上安装过程极其相似。整个过程,最耗时间的是sudo make编译,这个过程可以利用sudo make -j4/-j8来提高速度,不过这种多线程的方式,极容易引起问题,尽量不要采用。笔者尝试了好几次,都以失败告终,最终采用了单线程的方式,成功编译。