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 ...
随机推荐
- JAVA基础——包机制
包机制 包的语法格式package pkg1[.pkg2[.pkg3...]] 一般利用 公司域名倒置 作为包名; 例如www.baidu.com,则建立报的名字com.baidu.www 一般不要让 ...
- 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]
博客园 首页 新随笔 联系 订阅 管理 随笔 - 322 文章 - 0 评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转] 一./etc/fstab文件的作用 ...
- 使用U盘软碟通安装原版Windows10
https://zhuanlan.zhihu.com/p/171534675 使用U盘软碟通安装原版Windows10 一.准备:8G U盘一个,电脑装好UltraISO这个软件下载地址 二.Wind ...
- python-dict和list常用方法
1 # *********-list-********* 2 # 创建一个list 3 list1 = [1, 2, '力气,', 'afd'] 4 print(type(list1)) 5 prin ...
- Python 简单的龟鱼游戏
游戏编程:按一下要求定义一个乌龟类和鱼类并尝试编程 假设游戏场景为范围(x,y)为 0<=x<=10,0<=y<=10 游戏生成1只乌龟和10条鱼 他们的移动方向均随机 乌龟的 ...
- 自己封装的mysql应用类示例
from pymysql import *class my_mysql_mud(object): def __init__(self,host,port,db,user,passwd,charset= ...
- 11.2 uptime:显示系统的运行时间及负载
uptime命令可以输出当前系统时间.系统开机到现在的运行时间.目前有多少用户在线和系统平均负载等信息. [root@cs6 ~]# uptime 17:02:25 up 1:48, 3 user ...
- RabbitMQ 集群原理
RabbitMQ默认集群原理 rabbitmq 本身是基于erlang编写,erlang语言天生具备分布式的特性(通过同步Erlang集群各节点的erlang cookie实现),RabbiteMQ天 ...
- MYSQL导入/迁移后事件不执行
mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...
- python发送丁丁消息
import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...