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 ...
随机推荐
- [bug] idea @Override is not allowed when implementing interface method
解决 将idea环境jdk设置一致 参考 https://blog.csdn.net/shenya2/article/details/50460447 https://www.cnblogs.com/ ...
- 列表 元组 sort
列表 增append insert extend 迭代增加删 remove delete pop clear改 li[索引]="被修改的内容":切片"" 列表 ...
- elasticksearch分词,导致kibana的url出现问题
在Kibana的展示页面中,我们点击Table的左侧栏,发现Elasticsearch中的数据在展示中是正确的数据,比如:agent中www.baidu.com/test,该界面中会正确的显示为www ...
- 目录和文件 按创建时间排序du -h --time --max-depth=1 . |sort -r -t $'\t' -k 2 Linux查看文件夹大小,并按文件夹创建时间排序
目录和文件 按创建时间排序 # du -h --time --max-depth=1 . |sort -r -t $'\t' -k 230M 2020-04-01 14:54 .28K 2020-04 ...
- Centos7如何安装开源办公软件Libreoffice
在Centos7安装了WPS,但是用了没两月就出问题,无法正常使用.(准确来说,安装的WPS一直都有各种问题存在,但是没有影响到主要功能也就将就着用,后来是直接输入不了文字) 既然是开源系统,自然而然 ...
- Elasticsearch + Logstash + Kibana +Redis +Filebeat 单机版日志收集环境搭建
1.前置工作 1.虚拟机环境简介 Linux版本:Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:2 ...
- python 如何让俩个对象相等及如何让俩个对象具有相同的id值
- IDEA 创建 Vue 文件(Day_41)
IDEA 创建 Vue 文件 1. 在setting-->plugins里安装vue插件,安装成功之后重启IDEA 如图 2. 在setting-->Editor-->File Ty ...
- 防火墙 firewall iptables
firewalld FirewallD 使用服务service 和区域zone来代替 iptables 的规则rule和链chain,默认情况下,有以下的区域zone可用: drop – 丢弃所有传入 ...
- 详细教程丨如何利用Rancher和Kong实现服务网格?
服务网格(Service mesh)是当前新兴的架构模式,越来越受到人们的青睐.与Kubernetes一起,服务网格可以形成一个强大的平台,它可以解决在微服务集群或服务基础设施上发现的高度分布式环境中 ...