文章目录
前言
OpenCV(开源的计算机视觉库)是基于BSD协议,因此它可免费用于学术和商业用途。其提供C++,C,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。OpenCV致力于高效运算和即时应用开发。因其是用优化的C/C++编写的,故其可以充分利用多核处理优势。并且还启用了OpenSL,它可以利用底层异构计算平台的硬件加速。广泛运用在世界各地,OpenCV拥有超过4.7万人的用户社区和超过1400万的下载次数。从互动艺术、矿山检查、网络地图到先进的机器人技术都有OpenCV的身影。
一、Opencv的功能
- 人机互动
- 物体识别
- 图像分割
- 人脸识别
- 动作识别
- 运动跟踪
- 运动分析
- 机器视觉
- 结构分析
- 汽车安全驾驶
二、安装Opencv
1.下载 OpenCV 3.4.11 数据包
国外官网下载地址:https://github.com/opencv/opencv/releases,国外网址上下载,巨慢,建议使用百度云盘,迅雷。
国内快速下载地址:https://www.bzblog.online/wordpress/index.php/2020/03/09/opencvdownload/
2.解压安装包
创建一个名为Opencv的文件夹
mkdir opencv
将压缩包解压到opencv文件夹(指定一个文件夹)
unzip opencv-3.4.11.zip -d opencv
3.安装cmake和依赖库
进入opencv
cd opencv-3.4.11
安装cmake
sudo apt-get install cmake
注意
:如果提醒需要apt-get update
,那就先sudo su
进入root
权限,再sudo apt-get update
配置依赖库
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-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 install libjasper1 libjasper-dev
出现以下界面,问题解决
再次输入
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
耐心等待几分钟
三、配置编译环境
1.创建编译文件夹
创建build文件夹
mkdir build
进入build文件夹
cd build
使用cmake编译参数
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
生成编译文件
2.使用make创建编译
注:单线程编译:sudo make ,这会等待比较长的时间,如果你想更快编译完,可以使用命令:sudo make -j4 ,而 -j4 表示使用 4 个线程进行编译。
sudo make -j4
等等,经过漫长的等待后,怎么又出错了?
一开始一脸懵逼,仅使用这些关键词查找出问题的原因,看到一些答案说往上翻,可以看到红字,果不其然,我所出现的错误信息如下:
c++:internal compiler error:已杀死(program cc1plus)
再次查阅资料后,发现是我内存配置不够(原来是2G),有两种方法可供参考,一是设置虚拟机内存大小(我设置为3G),二是临时使用交换分区。
如果你也遇到这个问题,可参考
C++ 错误解决 —— internal compiler error
设置好内存大小后,重新输入命令
sudo make -j4
等待编译成功
执行命令
sudo make install
3.配置编译环境
修改 opencv.conf 文件
sudo gedit /etc/ld.so.conf.d/opencv.conf
打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib
,保存退出
执行如下命令使得刚才的配置路径生效
sudo ldconfig
修改 bash.bashrc 文件
sudo gedit /etc/bash.bashrc
在bash.bashrc 文件最末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,执行如下命令使得配置生效
source /etc/bash.bashrc
更新一下
sudo updatedb
报错了
执行
sudo apt-get install mlocate
sudo apt-get install aptitude
安装完成
sudo updatedb
如果当前用户权限不够
遇到权限问题需要进入root
执行
su root
执行
sudo apt-get unstall mlocate
至此所有的配置都已经完成。
不放心的话可以查看一下opencv版本信息
pkg-config --modversion opencv
失败了
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
经过网上详细查询资料后,是缺失了opencv.pc这个配置信息文件,故解决方法就是添加这个文件然后将其导入到环境变量中,具体操作如下:
首先创建opencv.pc文件,这里要注意它的路径信息:
cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo touch opencv.pc
打开opencv.pc
sudo gedit opencv.pc
然后在opencv.pc中添加以下信息,注意这些信息需要与自己安装opencv时的库路径对应:
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version:4.0.1
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
~
保存退出,然后将文件导入到环境变量:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
至此就配置好opencv.pc啦~
再执行 pkg-config --cflags --libs opencv时输出结果如下:
-I/usr/local/include/opencv4 -L/usr/local/lib \
-lopencv_shape -lopencv_stitching -lopencv_objdetect \
-lopencv_superres -lopencv_videostab -lopencv_calib3d \
-lopencv_features2d -lopencv_highgui -lopencv_videoio \
-lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml \
-lopencv_imgproc -lopencv_flann -lopencv_core
终于安装成功了!!!
四、Opencv使用例程
1.图片处理
qt建立cmake
将下面的代码复制粘贴进去
main.cpp代码
#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;
}
保存退出,编译
makelists
cmake_minimum_required(VERSION 2.8)
project(untitled3)
find_package(OpenCV REQUIRED)
##下面是输出信息
message(STATUS "Opnecv ;ibrary status: ")
message(STATUS "> version: ${OpenCV_VERSION} ")
message(STATUS "libraries: ${OpenCV_LIBS} ")
message(STATUS "> include: ${OpenCV_INCLUDE_DIRS} ")
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(untitled3 main.cpp)
target_link_libraries(untitled3 ${OpenCV_LIBS})
报错了
图片只能使用绝对路径,而且需要安装
sudo apt-get install libcanberra-gtk-module
相对路径有些奇怪,工程目录不是原目录,图片相对路径要从原目录出来,再进去新目录。
总结
在ubuntu下安装Opencv ,我遇到了很多小问题,不过庆幸的是,很多问题都可以在网上找到答案,也参考了很多大佬的文章,安装步骤等,在这学习过程中,我遇到了我一些小问题,有一点心得体会,于是参考下面两篇文章写了自己的关于Opencv 安装与使用步骤,感谢!!!
此外,在安装过程中,遇到问题很正常,只要大家耐心点,基本上出现的问题都可以找到解决办法的。
来源
Windows10&Ubantu16.04&树莓派3B+安装opencv教程
Ubuntu18.04下OpenCV3.4.11的安装及使用示例