目录

  • 什么是opencv
  • 安装opencv
  • 配置环境
  • 图片使用
    • 视频
  • 总结
  • 参考文献

什么是opencv

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

安装opencv

1.安装包下载
高速下载链接(官网下载非常慢)
![在这里插入图片描述](https://img-blog.csdnimg.cn/410e600305b44b39ba906eb7a812c7c9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA55G-5bm0T3ZP,size_20,color_FFFFFF,t_70,g_se,x_16
2.安装包解压

将opencv.3.4.11.zip复制到home中

unzip opencv-3.4.11.zip

3.使用cmake安装opencv
进入解压后的opencv-3.4.11

cd opencv-3.4.11

进入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

创建build文件

mkdir build

进入build文件

cd build

使用 cmake 编译参数

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

4.使用make创建编译

sudo make

过程漫长,耐心等待
5.安装

sudo make install

配置环境

修改 opencv.conf 文件,打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib
更新系统共享链接库

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

安装完成

图片使用

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

mkdir code
cd code

创建一个 test1.cpp 文件

gedit test1.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("ta.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++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

在用同文件夹下准备一张图片,文件名为:ta.jpg
输出结果执行以下命令:

./test1

视频

借鉴
(一)虚拟机获得摄像头权限(转)

使用快捷键 Win + R ,输入 services.msc ,并回车。

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

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

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

选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ Quanta USB2.0 VGA UVC WebCam ” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ” 。

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

(二)播放视频

创建一个 test2.cpp 文件

gedit test2.cpp

代码如下

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

准备一个小视频与代码中相同

编译 test2.cpp 文件

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

运行

./test2

(三)录制视频(转)

创建一个 test3.cpp 。

gedit test3.cpp

复制粘贴一下代码。
test3.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;
}

编译 test3.cpp 文件。

在这里插入图片描述 输出结果。

./test3

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

总结

通过本次实验,我学会了在ubuntu上对图片进行特效显示的方法。受益匪浅,过程很复杂,需要自己花时间去复习。关于视频方面,还在学习中,所以借鉴了其他大神的操作方法,自己再花时间学习。

参考文献

在Ubuntu18.04上安装opencv 3.4.1
Ubuntu下的opencv
Ubuntu18.04下OpenCV3.4.11的安装及使用示例

Ubuntu下载及使用opencv对图像及视频的处理方法相关推荐

  1. 使用Python,Opencv检测图像,视频中的猫

    使用Python,Opencv检测图像,视频中的猫

  2. C/C++开发,opencv读写图像与视频

    目录 一.opencv的图像缓存表达(cv::mat) 二.图片读写 2.1 图片读写API 2.2 图片读写案例 2.3 案例编译与测试 三.opencv的视频读写: 3.1 视频读写接口 3.2 ...

  3. Windows 下令 OpenCV 支持 h.264 视频编码的方法

    引言 OpenCV 和 ffmpeg 修改 opencv_ffmepgdll 的步骤 安装 MinGW 编译 x264 编译 ffmpeg 生成 opencv_ffmpegdll 准备 生成 测试 结 ...

  4. Ubuntu系统下基于Opencv完成图像编程

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

  5. [python + opencv]根据图像创建视频

    做项目的时候,对每一帧的图像进行检测,检测之后输出图片,然后将输出的图片合并成视频. 1. 使用glob获取所有图像文件名称 2. 使用cv2.imread()读取所有图像 3.将所有图像存储到一个列 ...

  6. opencv进行图像转视频(附带注释哦)

    import os import cv2 import numpy as nppath = 'E:/code/PycharmProjects/HuiTu/DataProcessing/img_vedi ...

  7. linux下opencv打不开视频的解决方法

    使用Linux+Opencv开发视频应用的时候,由于不清楚所依赖的库,导致重新编译了好多次Opencv才算成功.在根据之前一篇随笔所述的方法配置opencv的时候,由于一些软件包过时等原因,安装时提示 ...

  8. 基于opencv的图像等比例缩放

    项目中图片经常需要resize,但是直接调用resize方法可能会使图像造成畸变,下面给出,基于opencv的图像等比例缩放的方法. import cv2def resize_keep_aspectr ...

  9. Ubuntu下使用opencv完成图像程序编程操作

    前言 一.安装opencv 1.1安装环境 1.2下载OpenCV 1.3解压opencv包 1.4使用cmake安装opencv 1.5使用 make 创建编译 1.6安装 1.7配置环境 二.实例 ...

最新文章

  1. 当前被频频提及的企业数字化转型是什么?
  2. Java内存溢出详解
  3. java try catch嵌套_try catch里面try catch嵌套
  4. 面向对象的JavaScript-009-闭包
  5. PHP语言Yii框架,Yii框架多语言站点配置方法分析【中文/英文切换站点】
  6. undo表空间暴长,如何取消自动扩展
  7. (论坛答疑点滴)DataGrid的EditCommandColumn如何使用图片作为按钮?
  8. python二叉树的创建与遍历
  9. 一步一步学ROP之linux_x64篇
  10. 基于modelsim的十个Verilog入门试验程序(2)(JK触发器+环形计数器)—程序+测试代码+波形+结果分析
  11. 在Python中模拟do-while循环?
  12. 在线编程 - PyPool小站启动记
  13. Web前端性能优化——CSS优化
  14. 超标量处理器设计 姚永斌 第1章 超标量处理器概览 摘录
  15. 驱动人生8新版助力电脑性能起飞
  16. Numpy下载并安装
  17. 618|Python购书攻略
  18. idea使用技巧总结,超实用(2年mac idea使用经验)
  19. 【linux内核分析与应用-陈莉君】中断机制概述
  20. 概率论第六章——矩估计

热门文章

  1. 基于git和svn的开源代码托管平台
  2. 英雄人物的介绍(人物一栏弹出来的)
  3. JFlow工作流项目集成案例_Java开源项目 RuoYi v4.1.0
  4. 网站不稳定的原因有哪些
  5. 如何让centos7虚拟机联网
  6. Foxit Mobile PDF SDK 入门级(1)-显示一个PDF-Swift工程中的使用(Xcode 7.x, swift 2.x)
  7. 计算图像的均值与标准差
  8. 洛谷P2392 kkksc03考前临时抱佛脚
  9. LintCode 111. 爬楼梯 JavaScript算法
  10. 抗疫先锋 | 戴尔科技集团与您共克时艰