OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测
我们本节学习如何利用 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 边缘检测相关推荐
- OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测
在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处. 在这里,我们 ...
- 【OpenCV】图像的形态学操作|腐蚀|膨胀|Canny边缘检测
文章目录 常见图像形态学算法 膨胀和腐蚀概念 erode 膨胀和腐蚀的主要用途 结构元素 图像噪声分类 给图像添加噪声 图像添加噪声 GaussianBlur medianBlur bilateral ...
- Python opencv学习-2读取视频,存视频,设置视频大小
test2:各种通道读取视频(摄像头.url.视频文件),存视频,设置视频大小等 import numpy as np import cv2# 视频来源为摄像头 cap = cv2.VideoCapt ...
- OpenCV Canny边缘检测
Canny算法: 流程: 噪声去除:高斯滤波 计算图像梯度:sobel算子,计算梯度大小和方向 非极大值抑制:利用梯度方向像素来判断当前像素是否为边界点 滞后阈值:设置两个阈值,确定最终的边界 Can ...
- 【opencv学习】【读取图像、视频、摄像头】
今天学习opencv 一:读取图像 import cv2# 展示图像,封装成函数 def cv_show_image(name, img):cv2.imshow(name, img)cv2.waitK ...
- OpenCV捕获视频和摄像头
从文件中捕获视频 其实使用OpenCV读取视频相当简单,只需要初始化一个VideoCapture对象,打开视频文件,逐帧读取. 程序 下面是简单的OpenCV代码: 1 2 3 4 5 6 7 8 9 ...
- Ubuntu下使用Anaconda安装opencv 解决无法读取视频
Ubuntu下使用Anaconda安装opencv 最近在Ubuntu16.04下使用Anaconda安装opencv,碰到很多坑,记录备忘. cv2.VideoCapture(filename) 返 ...
- 【opencv系列03】OpenCV4.X视频捕获与显示
点击上方"AI搞事情"关注我们 一. 视频获取与显示 VideoCapture类实现视频获取,可以从摄像头或者文件进行视频读取.首先,创建一个VideoCapture对象,参数可以 ...
- opencv2读取摄像头并保存为视频
opencv2读取摄像头并保存为视频 #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui ...
最新文章
- 7.0系统设备xposed框架激活经验
- 祝贺自己itpub和csdn双双荣获专家博客标题
- python难嘛-为什么说python入门很简单,但是在你这很难?
- SameSite Cookie,防止 CSRF 攻击
- 从零开始学习docker(十六)Swarm mode 创建集群
- 小程序开发(4)-之登录
- 码匠编程:学习Web前端开发时有哪些技术点
- 一个简单的网页抓取工具
- 861. Score After Flipping Matrix
- 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
- 大数据分析有哪些核心技术
- 网页制作的基本知识(标签)
- java笔记--关于int和byte[]的转换
- 广州自由自在进口食品进入寻常百姓家
- CSTA协议英汉词汇
- QQ群管机器人html官网源码
- 计算机键盘怎样做除法,电脑键盘除法是哪个键?
- CentOS 7 出现 a problem has occured and the system can‘t recover 解决办法:组合键进入命令行进行修复
- 面试官问:你在项目中做过哪些安全防范措施?
- matlab读取数据流,【OpenBCI】(1):Matlab实时读取数据流(labstreaminglayer)