文章目录

  • 一、OpenCV简介
  • 二、安装OpenCV
    • 2.1 安装包下载
    • 2.2 使用cmake安装
    • 2.3 配置环境
  • 三、使用实例
    • 3.1 图片运用
    • 3.2 视频运用
  • 四、总结
  • 五、参考文献

一、OpenCV简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提拱了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

二、安装OpenCV

安装环境:VMware虚拟机安装的Ubuntu 18.04系统

2.1 安装包下载

下载OpenCV 数据包

在虚拟机中使用浏览器进行下载

搜索官网

选择Github

下滑选择最新版本


右键,提取到一个文件夹存放

完成后如下:

2.2 使用cmake安装

右击OpenCV文件夹,选择在终端打开

首先进入root用户,并更新一下

sudo su
sudo apt-get update


接着执行命令安装cmake

sudo apt-get install cmake


执行下面这条命令安装依赖库

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev

由于我执行这条语句时,出现了错误:无法覆盖 libjasper-dev ,因为已经存在了,所以我执行这条命令的时候删掉最后一个库:libjasper-dev
在主机中使用 ctrl+c 复制命令,再虚拟机中使用快捷键 ctrl+shift+v 粘贴命令即可,前提是虚拟机安装了 VMware Tools

删掉最后一个库,成功执行上面命令

在创建build文件夹

mkdir build

然后进入我们创建的文件夹

cd build


使用 cmake 编译参数,或者使用第二条默认参数,都可以的。

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake ..


使用make创建编译,任然在build文件夹下进行(漫长的编译过程)

sudo make


编译完成!!

安装

sudo make install

安装过程中没有报错,即可安装完成。

2.3 配置环境

修改 opencv.conf 文件,打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib

sudo gedit /etc/ld.so.conf.d/opencv.conf

保存后退出该文件夹,右上角保存并关闭

保存后会看到之前的警告信息,不用担心,正常情况。

更新系统共享链接库

sudo ldconfig


配置 bash ,修改 bash.bashrc 文件

sudo gedit /etc/bash.bashrc


在文件末尾加入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

保存退出,然后执行如下命令使得配置生效

source /etc/bash.bashrc


更新一下

sudo updatedb

查看 opencv 的版本信息

pkg-config --modversion opencv

发现报错

因为我们用的是OpenCV4版本,默认不使用pkg-config
参考文献:为什么OpenCV4 “pkg-config --modversion opencv”显示“ No package ‘opencv‘ found”?解决方法!

三、使用实例

3.1 图片运用

首先创建一个代码存放文件夹 ,然后进入文件夹中。

test.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;
}

编译文件

gcc test.cpp -o test `pkg-config --cflags --libs opencv`

gcc编译器:gcc + 文件名 + -o + 输出文件流名称 +` 支持包

编译出错了!!!百度了一下,说是:需要用 C++ 编译器编译你的接口模块。将 gcc 改为 g++ 后就正确了,可以看到有了可执行文件 test ,

在用同文件夹下准备一张图片,文件名为:test.jpeg

输出结果:

./test

可以看到由 lena.jpg 生成了一个 test.png ,呈现的效果不同了

3.2 视频运用

虚拟机获取摄像头权限
使用快捷键 Win + R ,输入 services.msc ,并回车。

找到 VMware USB Arbitration S… 服务,确保启动了

点击 “ 虚拟机 ” ,然后点击 “ 设置(S)… ”

选择 “ USB控制器 ” ,将 “ USB兼容性 ” 设置为 “ USB 3.1 ” ,并点击确定。

选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “Acer BisonCarm,NB Pro ” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ”

虚拟机右下角这个摄像头图标有个小绿点,则连接成功。

播放视频

创建一个test1.cpp文件
代码如下

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{//读取视频VideoCapture capture("sd.mp4");//循环显示每一帧while(1){Mat frame;//定义一个Mat变量,用于存储每一帧的图像capture >> frame;//读取当前帧if(frame.empty())//播放完毕,退出break;imshow("读取视频帧",frame);//显示当前帧waitKey(30);//掩饰30ms}system("pause");return 0;
}

如果语句:VideoCapture capture(0),后面的参数设置为 0 ,则从摄像头读取视频并循环显示每一帧;如果设置为一个视频的文件名,比如:man.mp4 ,则会将视频读取并循环显示每一帧。

while 循环体中的 Mat 数据结构其实是一个点阵,对应图像上的每一个点,点的集合形成了一帧图像,有关 Mat 详解请看:OpenCV中Mat数据构

语句:waitKey(30) ,中的参数单位是 ms 毫秒,也就是每一帧间隔 30 ms ,该语句时不能删除的,否则会执行错误,无法播放视频或录制视频。

准备了一个sd.mp4
编译 test1.cpp 文件

g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

输出结果

./test1


录制视频
创建一个test2.cpp文件

代码如下:

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;int main()
{//打开电脑摄像头VideoCapture cap(0);if (!cap.isOpened()){cout << "error" << endl;waitKey(0);return 0;}//获得cap的分辨率int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));int h = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT));Size videoSize(w, h);VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize);Mat frame;int key;//记录键盘按键char startOrStop = 1;//0  开始录制视频; 1 结束录制视频char flag = 0;//正在录制标志 0-不在录制; 1-正在录制while (1){cap >> frame;key = waitKey(100);if (key == 32)//按下空格开始录制、暂停录制   可以来回切换{startOrStop = 1 - startOrStop;if (startOrStop == 0){flag = 1;}}if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘{break;}if (startOrStop == 0 && flag==1){writer << frame;cout << "recording" << endl;}else if (startOrStop == 1){flag = 0;cout << "end recording" << endl;}imshow("picture", frame);}cap.release();writer.release();destroyAllWindows();return 0;
}

编译

g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`

输出结果:

./test2

生成了一个 .avi 文件,并不断生成帧。

四、总结

gcc test1.cpp -o test1 pkg-config --cflags --libs opencv

gcc编译器:gcc + 文件名 + -o + 输出文件流名称 +` 支持包

在test.1cpp代码中,while 循环体中的 Mat 数据结构其实是一个点阵,对应图像上的每一个点,点的集合形成了一帧图像,有关 Mat 详解请看:OpenCV中Mat数据构

五、参考文献

Ubuntu18.04下OpenCV3.4.11的安装及使用示例

Ubuntu系统下基于Opencv完成图像编程相关推荐

  1. 【嵌入式】在Ubuntu系统下通过OpenCV实现点阵汉字的字模读取与显示

    介绍汉字点阵的原理,理解汉字的机内码.区位码编码规则和字形数据存储格式,通过OpenCV在Ubuntu系统下显示点阵汉字 一.汉字点阵原理 1.汉字点阵原理 1.点阵 2.汉字编码 3.点阵字库存储 ...

  2. Ubuntu系统下python opencv视频采集:使用USB端口映射指定要读取的相机设备

    Ubuntu16.04 下 python opencv 视频采集:使用USB端口映射指定要读取的相机设备 有时我们需要读取指定设备的视频流,但笔记本电脑通常自带相机,同时可能连接多个USB相机,每次插 ...

  3. Ubuntu系统下用gcc和Makefile编程

    # 安装Ubuntu 在Windows环境下通过虚拟软件VMware安装Ubuntu https://pan.baidu.com/s/1KAZuW46ObVmIXZeoccs90Q [提取码]:wd5 ...

  4. Ubuntu系统下查看摄像头参数并基于OpenCV调用

    目录 1. 安装v4l-utils 2. 查找连接的摄像头列表 3. 查看各相机支持的分辨率.帧率.像素格式等参数 4. 注意事项 5. OpenCV(C++)调用摄像头代码 本博文描述了在Ubunt ...

  5. 【嵌入式1】Ubuntu系统下运行C语言程序以及用Makefile方式编程

    文章目录 一.设置网络参数 1.虚拟机网络适配器设置为NAT模式 2.确定网卡ip 3.设置NAT网络的端口映射 4.进行网络测试 二.用C语言编写一个简单的输出 hello word 的程序. 三. ...

  6. 基于虚拟机Ubuntu系统下C语言简单编写程序

    目录描述 前言 一.修改系统参数 1.查看Ubuntu版本 2.原文件备份 3.下载清华源 二.编写"hello world"C语言程序 1.安装vim 2.建立hello.c 3 ...

  7. 基于ubuntu系统下的USB设备绑定

    目录 前言 基本原理 实现方法 前言 在Ubuntu系统的使用中,没有对USB进行设备进行绑定的话,每次插拔或者顺序的不同,都会造成ttyUSB端口号的改变,不利于实际应用,一劳永逸地方法就是对其进行 ...

  8. [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息

    系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...

  9. ubuntu下c语言编程工具,Ubuntu系统下C语言代码检查工具(Splint)

    看一下下面的代码(当然包括错误,以检验splint的功能): #include int main(int argc,char* argv[]){ int a=100; /*没有使用的变量*/ int ...

最新文章

  1. 计算机IP地址与子网掩码如何进行AND运算
  2. 同时打开多个VC工程
  3. 滑动轨迹 曲线 python_python – 计算轨迹(路径)中的转折点/枢轴点
  4. 河北大学计算机专业调剂,【计算机考研调剂】河北大学2021级硕士研究生预调剂信息统计的通知...
  5. 利用机器学习进行金融数据风险评估
  6. C++算法学习(力扣:1003. 检查替换后的词是否有效)
  7. UI动画的一些制作过程
  8. 完善的WebGis地图编辑器
  9. WindowsServer2008R2系统版本升级
  10. 【转】解决win10系统每次重启桌面图标排列混乱的问题!亲测有效!!
  11. python面向对象爬取某鱼颜值区主播图片
  12. 制作Java视频播放器
  13. 重启服务器命令有哪些,每一个重启命令区别又是什么?
  14. vue的组件和es6模板引擎 组件
  15. Microsoft Excel 2000/2003修复工具
  16. Visio Viewer 无法打开 VSD文件
  17. html加载特效大全,10种炫酷的CSS3 loading加载动画特效
  18. entware 安装 php7,[N1盒子]斐讯N1盒子entware环境安装amule下载ed2k出现KAD Firewall错误解决方法...
  19. Avaya Aura System Manager 8.1.3.x Hot Fix for Log4j vulnerabilities.
  20. Python学习网站(简明python教程,The Python Tutorial,Python学习笔记,啄木鸟社区)

热门文章

  1. 计算机里的文案怎么设置背景,win10系统设置浏览器背景的详细方案
  2. __builtin_expect用法
  3. 正确加载MySQL驱动的语句_使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法...
  4. HDU-5455 Fang Fang (思维)
  5. SAS常用基础代码例子-聚类分析
  6. Centos7 虚拟机联网配置
  7. html中超链接使用_html中的a标签,超链接代码的详细介绍
  8. mysql sqlserver 性能优化_SQLServer性能优化之---数据库级日记监控
  9. lvcreate时报错
  10. R语言使用epiDisplay包的kap函数计算两个分类变量的相关性的强弱、计算一致性的比例以及Kappa统计量的值