我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头。

VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从视频文件或从摄像头捕获视频并显示出来。

1. 读取并播放视频

VideoCapture 读入视频方法有两种:

  • 先实例化再初始化:
VideoCapture capture;
capture.open("demo.mp4");
  • 在实例化的同时进行初始化:
VideoCapture capture("demo.mp4");

这两种写法的区别就如我们定义一个 int 类型的变量一样:

int a;
a = 1;

为先定义再初始化,而

int a = 1;

为在定义时初始化。

完整代码:

#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv;  int main()
{VideoCapture capture("demo.mp4");    // 读入视频if(!capture.isOpened())  // 判断文件是否正确打开{std::cout << "video not exist";return -1;}while(1) // 循环显示每一帧{Mat frame;  // 定义一个Mat 变量, 用于存储每一帧的图像capture >> frame; // 读取当前帧到 Mat 变量中 imshow("读取视频", frame);  // 显示当前帧 waitKey(30);   // 延时 30 ms}capture.release();  //释放资源return 0;
}

2. 通过摄像头采集视频

要调用摄像头进行视频采集的话,将代码

VideoCapture capture("demo.mp4")

替换为

VideoCapture capture(0)

表示从摄像头而不是从文件中读取视频。其它代码和通过读取视频文件播放视频代码一致,完整代码如下:

#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv;  int main()
{VideoCapture capture(0);   // 读入视频if(!capture.isOpened())  // 判断文件是否正确打开{std::cout << "video not exist";return -1;}while(1) // 循环显示每一帧{Mat frame;  // 定义一个Mat 变量, 用于存储每一帧的图像capture >> frame; // 读取当前帧到 Mat 变量中 imshow("读取视频", frame);  // 显示当前帧 waitKey(30);   // 延时 30 ms}capture.release();  //释放资源return 0;
}

3. 采集视频并做 canny 检测

我们还可以用上面的摄像头调用示例程序来配合 canny 边缘检测, 得到 canny 边缘检测并高斯模糊后的摄像头采集视频,源码如下:

#include <iostream>
#include "opencv2/opencv.hpp"using namespace cv;  int main()
{VideoCapture capture(0);   // 从摄像头读入视频if(!capture.isOpened())  // 判断文件是否正确打开{std::cout << "video not exist";return -1;}Mat edges;while(1) // 循环显示每一帧{Mat frame;    // 定义一个Mat 变量, 用于存储每一帧的图像capture >> frame; // 读取当前帧到 Mat 变量中 cvtColor(frame, edges, COLOR_BGR2GRAY); // 转换 BGR 图为灰度图// 使用 3x3 内核降噪 2x3+1=7blur(edges, edges, Size(7, 7)); // 进行模糊// 进行 canny 边缘检测并显示Canny(edges, edges, 0, 30, 3);imshow("边缘检测并模糊后的视频", edges);    // 显示当前帧 waitKey(30);   // 延时 30 ms}capture.release();  //释放资源return 0;
}

OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测相关推荐

  1. OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测

    在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处. 在这里,我们 ...

  2. 【OpenCV】图像的形态学操作|腐蚀|膨胀|Canny边缘检测

    文章目录 常见图像形态学算法 膨胀和腐蚀概念 erode 膨胀和腐蚀的主要用途 结构元素 图像噪声分类 给图像添加噪声 图像添加噪声 GaussianBlur medianBlur bilateral ...

  3. Python opencv学习-2读取视频,存视频,设置视频大小

    test2:各种通道读取视频(摄像头.url.视频文件),存视频,设置视频大小等 import numpy as np import cv2# 视频来源为摄像头 cap = cv2.VideoCapt ...

  4. OpenCV Canny边缘检测

    Canny算法: 流程: 噪声去除:高斯滤波 计算图像梯度:sobel算子,计算梯度大小和方向 非极大值抑制:利用梯度方向像素来判断当前像素是否为边界点 滞后阈值:设置两个阈值,确定最终的边界 Can ...

  5. 【opencv学习】【读取图像、视频、摄像头】

    今天学习opencv 一:读取图像 import cv2# 展示图像,封装成函数 def cv_show_image(name, img):cv2.imshow(name, img)cv2.waitK ...

  6. OpenCV捕获视频和摄像头

    从文件中捕获视频 其实使用OpenCV读取视频相当简单,只需要初始化一个VideoCapture对象,打开视频文件,逐帧读取. 程序 下面是简单的OpenCV代码: 1 2 3 4 5 6 7 8 9 ...

  7. Ubuntu下使用Anaconda安装opencv 解决无法读取视频

    Ubuntu下使用Anaconda安装opencv 最近在Ubuntu16.04下使用Anaconda安装opencv,碰到很多坑,记录备忘. cv2.VideoCapture(filename) 返 ...

  8. 【opencv系列03】OpenCV4.X视频捕获与显示

    点击上方"AI搞事情"关注我们 一. 视频获取与显示 VideoCapture类实现视频获取,可以从摄像头或者文件进行视频读取.首先,创建一个VideoCapture对象,参数可以 ...

  9. opencv2读取摄像头并保存为视频

    opencv2读取摄像头并保存为视频 #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui ...

最新文章

  1. 7.0系统设备xposed框架激活经验
  2. 祝贺自己itpub和csdn双双荣获专家博客标题
  3. python难嘛-为什么说python入门很简单,但是在你这很难?
  4. SameSite Cookie,防止 CSRF 攻击
  5. 从零开始学习docker(十六)Swarm mode 创建集群
  6. 小程序开发(4)-之登录
  7. 码匠编程:学习Web前端开发时有哪些技术点
  8. 一个简单的网页抓取工具
  9. 861. Score After Flipping Matrix
  10. 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
  11. 大数据分析有哪些核心技术
  12. 网页制作的基本知识(标签)
  13. java笔记--关于int和byte[]的转换
  14. 广州自由自在进口食品进入寻常百姓家
  15. CSTA协议英汉词汇
  16. QQ群管机器人html官网源码
  17. 计算机键盘怎样做除法,电脑键盘除法是哪个键?
  18. CentOS 7 出现 a problem has occured and the system can‘t recover 解决办法:组合键进入命令行进行修复
  19. 面试官问:你在项目中做过哪些安全防范措施?
  20. matlab读取数据流,【OpenBCI】(1):Matlab实时读取数据流(labstreaminglayer)

热门文章

  1. 2022-2028年中国急救中心行业发展战略规划及未来前景展望报告
  2. 2022-2028年中国绿冻石行业市场研究及前瞻分析报告
  3. 数据结构(06)— 线性循环链表实战
  4. 【Sql Server】Database-存储过程
  5. visual2017中给C#项目添加配置文件
  6. GPT-3 Finetune
  7. tensorflow学习笔记(二十五):ConfigProtoGPU
  8. torch.nn.Linear()函数的理解
  9. LeetCode简单题之同构字符串
  10. SLAM图优化g2o