Opencv 播放mp4文件和读取摄像头图以及可能会发生的一些异常问题解决方法
学习内容
学习Opencv 读取并播放本地视频和打开摄像头图像以及可能会发生的一些异常问题解决方法
代码演示
电脑环境信息: OpenCV版本:4.5.2 ,vs2017
1.视频文件读取与播放
加载本地视频基本代码:
#include "opencv2/opencv.hpp"
#include <iostream>
#include <Windows.h>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
cv::VideoCapture vedio("D:/workspace/opencv/project/test.mp4");
if (!vedio.isOpened())
{
cout << "读取视频文件失败!" << endl;
return -1;
}
else
{
cout << "读取视频文件成功!" << endl;
}
return 0;
}
运行结果

我们发现运行结果是读取失败,然后我们先检查一下文件是否存在,我们的路径是否写错....
经过一阵的捣鼓,发现视频文件确实存在而且没有错误,路径也是非常的正确!
那为什么不能加载呢?试着猜想会不会缺少相关的库造成呢,经探索,opencv播放是依赖ffmpeg的,所以我们去找相关的库放在同exe目录下试试。
1.找到安装的opencv目录处

2.复制到我们debug目录下跟exe同级

接下来我们再运行一次

哎,运行成功啦。
接下来,读取视频文件没有问题啦,就进行显示代码的编写
#include "opencv2/opencv.hpp"
#include <iostream>
#include <Windows.h>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
cv::VideoCapture vedio("D:/workspace/opencv/project/test.mp4");
if (!vedio.isOpened())
{
cout << "读取视频文件失败!" << endl;
return -1;
}
else
{
cout << "读取视频文件成功!" << endl;
}
Mat frame;
namedWindow("Vedio", WINDOW_NORMAL);
/*视频文件的宽高和帧率信息*/
cout << "Vedio Width:" << vedio.get(CAP_PROP_FRAME_WIDTH) << endl;
cout << "Vedio Height:" << vedio.get(CAP_PROP_FRAME_HEIGHT) << endl;
cout << "Vedio FPS:" << vedio.get(CAP_PROP_FPS) << endl;
/*循环读取视频文件*/
while (true)
{
vedio >> frame; /*获取一帧*/
if (frame.empty()) /*读取完成则退出*/
break;
double sec = 1000.0 / vedio.get(CAP_PROP_FPS);/*播放速度*/
if (waitKey(sec) == VK_ESCAPE) /*播放过程中可按ESC退出播放*/
break;
imshow("Vedio", frame); /*显示帧*/
}
destroyAllWindows();/*清理资源*/
return 0;
}
运行结果


播放视频文件编写完成!
2.读取摄像头图像
有了上面的基础,编写读取摄像头的方式就非常简单啦
#include "opencv2/opencv.hpp"
#include <iostream>
#include <Windows.h>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
cv::VideoCapture vedio;
vedio.open(0); /*读取第一个摄像头*/
if (!vedio.isOpened())
{
cout << "打开摄像头失败!" << endl;
return -1;
}
else
{
cout << "打开摄像头成功!" << endl;
}
Mat frame;
namedWindow("Vedio", WINDOW_NORMAL);
/*视频文件的宽高和帧率信息*/
cout << "Vedio Width:" << vedio.get(CAP_PROP_FRAME_WIDTH) << endl;
cout << "Vedio Height:" << vedio.get(CAP_PROP_FRAME_HEIGHT) << endl;
/*循环读取视频文件*/
while (true)
{
vedio >> frame; /*获取一帧*/
if (frame.empty()) /*读取完成则退出*/
break;
int sec = 25;/*播放速度*/
if (waitKey(sec) == VK_ESCAPE) /*播放过程中可按ESC退出播放*/
break;
imshow("Vedio", frame); /*显示帧*/
}
destroyAllWindows();/*清理资源*/
return 0;
}
运行结果


以上就是利用OpenCV读取摄像头的内容
四.结束
简单的东西也需要做简单的记录,在打开摄像头这里,只能按Index序号打开,但如果实际中存在有多个摄像头的时候呢?如何区分以及如何去指定打开其中一个摄像头?值得思考一下,敬请待续。
Opencv 播放mp4文件和读取摄像头图以及可能会发生的一些异常问题解决方法的更多相关文章
- 使用opencv在Qt控件上播放mp4文件
文章目录 简介 核心代码 运行结果 简介 opencv是一个开源计算机视觉库,功能非常多,这里简单介绍一下OpenCV解码播放Mp4文件,并将图像显示到Qt的QLabel上面. 核心代码 头文件 #i ...
- video.js播放mp4文件
HTML5的标签 video 支持的mp4编码为视频编码 H.264 音频AAC 参考网址 http://www.w3school.com.cn/html5/html_5_video.asp 视频格式 ...
- 视频播放效果--video.js播放mp4文件
HTML5的标签 video 支持的mp4编码为视频编码 H.264 音频AAC 参考网址 http://www.w3school.com.cn/html5/html_5_video.asp 视频格式 ...
- ffmpeg和opencv 播放视频文件和显示器
ffmpeg它是基于最新版本,在官网下载http://ffmpeg.zeranoe.com/builds/.编译时VS2010配置相关头文件及库的路径就可以.opencv的搭建參考上一个博客. 首先简 ...
- Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]
主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...
- 配置IIS让网站可以播放mp4文件
最近遇到这么一个问题,网站当中的mp4不能播放了--每次点击播放的时候都会产生404的错误(如下图).这个问题来得有些蹊跷,因为在这台服务器上其他的文件都能正常执行,比如xml.jpg.aspx等文件 ...
- Ubuntu下编译安装OpenCV 2.4.7并读取摄像头
主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...
- ios学习:AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件
首先要导入AVFoundation框架及 #import <AVFoundation/AVFoundation.h>头文件 注意:要在真机上调试 下面是ipad上的调试效果 下面是代码,代 ...
- JavaCV推流实战(MP4文件)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 【Azure 云服务】Azure Cloud Service 创建 Alert 指南 [基于旧版 Alert(Classic)不可用情况下]
问题描述 在Azure云服务(Cloud Service)创建Alert(Classic)时候遇见失败消息:"Failed to update alert testclassicalertr ...
- Rsync忽略文件夹或目录
使用Rsync同步的时候往往会要求对某个文件夹或者文件进行忽略,客户端可以使用--exclude参数来实现对,目录或者文件的忽略 rsync -rltvz --port=873 --exclude & ...
- python基础之字典、集合
一.字典(dictionary) 作用:存多个值,key-value存取,取值速度快 定义:key必须是不可变类型,value可以是任意类型 字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分 ...
- Python3统计gitlab上的代码量
import threading import gitlab import xlwt #获取所有的user def getAllUsers(): usersli = [] client = gitla ...
- MarkDown笔记一
目录 目录 字体 标题 下划线标题 #号标题 加重与斜体 高亮 删除线 上标与下标 脚注 转义字符 分割线 段落 空行 结尾两个空格 区域引用 每行> 每段> 可嵌套 目录 把文档中所有标 ...
- Spring的三种注入
在学习Spring的过程中,其中一个很重要的就是依赖注入DI,在此总结一下 注入方式有三种: 一.构造器注入 二.Set方式注入(重点) 三.扩展方式注入 构造器注入: a.默认使用无参构造函数创建对 ...
- GO学习-(8) Go语言基础之数组
Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...
- Linux资源监控工具 glances
使用资源监控工具 glances 前言 glances 可以为 Unix 和 Linux 性能专家提供监视和分析性能数据的功能,其中包括: CPU 使用率 内存使用情况 内核统计信息和运行队列信息 磁 ...
- 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著
你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...
- THINKPHP_(3)_TP6中实现多层关联,第一个表关联第二个表查询出的数据,再关联第三个表
问题: (1)canxunDanwei数据表对应的模型中有一个关联是: public function canxunDanwei() { return $this->belongsTo('\ap ...