opencv学习—VideoCapture 类基础知识

文章目录

  • 一、OpenCV VideoCapture打开摄像头接口讲解和源码分析
    • VideoCapture
      • bool open ( int index )
      • VideoCapture cap(index)
  • 二、OpenCV VideoCapture打开视频流接口讲解和源码分析
  • 三、VideoCapture release关闭和空间释放源码分析
  • 四、OpenCV read读取一帧视频接口讲解和源码分析
  • 五、使用OpenCV VideoCapture播放视频示例
    • isOpen判断打开失败原因
      • 1.opencv_ffmpeg.dll 没有放入bin
      • 2. 尚未得知
    • 读取Frame(解码+转rgb)
      • Read()
      • 流形式
    • 解码+转化颜色
    • 源码
  • 六、获取视频和相机的属性并分析获取视频属性的源码
    • 获取视频、相机属性
    • 源码
  • 七、使用opencv实现视频播放位置跳转
    • 获得当前帧号
    • 设置跳转帧
    • 源码
  • 八、通过VideoWrite的open创建视频文件并分析源码
    • VideoWriter
      • open
      • create
  • 九、通过VideoWrite的write创建视频文件并分析源码
    • VideoWriter
      • write
      • writeFrame
  • 十、以h264格式录制并预览摄像机视频代码演示
    • 摄像头打开失败的几个原因
      • openH264dll少了
    • 源码
  • 十一、使用ffmpeg工具实现音频抽取、剪切和与视频
    • 使用ffmpeg工具抽取音频
    • 使用ffmpeg剪切音频
    • 使用ffmpeg工具音视频合并

一、OpenCV VideoCapture打开摄像头接口讲解和源码分析

VideoCapture

可以打开数据源(文件/摄像机/rtsp流)

以下两种方案打开:

  • bool open ( int index )
  • VideoCapture cap(index)

bool open ( int index )

VideoCapture cap(index)

二、OpenCV VideoCapture打开视频流接口讲解和源码分析

三、VideoCapture release关闭和空间释放源码分析

四、OpenCV read读取一帧视频接口讲解和源码分析

五、使用OpenCV VideoCapture播放视频示例

isOpen判断打开失败原因

1.opencv_ffmpeg.dll 没有放入bin

2. 尚未得知

注意:我使用的opencv-3.4.1/3.4.16 版本 无法打开MP4 我换avi格式 isOpen就成功了,怀疑是x264.dll 以及相关没有导致不支持mp4

读取Frame(解码+转rgb)

Read()

VideoCapture video;
Mat frame;
video.read(frame)

流形式

VideoCapture video;
Mat frame;
video >> frame;

解码+转化颜色

if (!video.grab())
{break;
}//转换颜色格式
if (!video.retrieve(frame))
{break;
}

解码和转化颜色分割开来,类似利于实现解码一个线程和渲染一个线程的道理

源码

int main(int argc, char *argv[])
{VideoCapture video;cv::String strPath = ".\\res\\test.avi";video.open(strPath);if (!video.isOpened()){cout << "open video failed!" << endl;getchar();return -1;}cout << "open video success!" << endl;namedWindow("video");Mat frame;for (;;){//if (!video.read(frame))//{//  break;//}//读帧,解码if (!video.grab()){break;}//转换颜色格式if (!video.retrieve(frame)){break;}if (frame.empty()) break;imshow("video", frame);waitKey(30);}getchar();return 0;
}

六、获取视频和相机的属性并分析获取视频属性的源码

获取视频、相机属性

  • CAP_PROP_FPS帧率
  • CAP_PROP_FRAME_COUNT总帧数
  • CAP_PROP_POS_FRAMES 播放帧的位置
  • CAP_PROP_FRAME_WIDTH
  • CAP_PROP_FRAME_HEIGHT

源码

int main(int argc, char *argv[])
{VideoCapture video;video.open(".\\res\\test.avi");if (!video.isOpened()){cout << "open video failed!" << endl;getchar();return -1;}cout << "open video success!" << endl;namedWindow("video");Mat frame;int fps = video.get(CAP_PROP_FPS);int s = 30;if (fps != 0)s = 1000 / fps;cout << "fps is " << fps << endl;int fcount = video.get(CAP_PROP_FRAME_COUNT);cout << "total frame is " << fcount << endl;cout << "total sec is " << fcount / fps << endl;cout << "CAP_PROP_FRAME_WIDTH " << video.get(CAP_PROP_FRAME_WIDTH) << endl;cout << "CAP_PROP_FRAME_HEIGHT " << video.get(CAP_PROP_FRAME_HEIGHT) << endl;s = s / 2;int f = 0;for (;;){video.read(frame);if (frame.empty()) break;imshow("video", frame);waitKey(s);}getchar();return 0;
}

七、使用opencv实现视频播放位置跳转

建议:使用帧数进行跳转;使用毫秒数跳转,需要先转为帧数,再进行帧数跳转

获得当前帧号

  • CAP PROP POS FRAMES
video.get( CAP PROP POS FRAMES);

设置跳转帧

video.set( CAP PROP POS FRAMES,0);//跳到 第一帧

源码

int main(int argc, char *argv[])
{VideoCapture video;video.open(".\\res\\test.avi");if (!video.isOpened()){cout << "open video failed!" << endl;getchar();return -1;}cout << "open video success!" << endl;namedWindow("video");Mat frame;int fps = video.get(CAP_PROP_FPS);int s = 30;if (fps != 0)s = 1000 / fps;cout << "fps is " << fps << endl;int fcount = video.get(CAP_PROP_FRAME_COUNT);cout << "total frame is " << fcount << endl;cout << "total sec is " << fcount / fps << endl;cout << "CAP_PROP_FRAME_WIDTH " << video.get(CAP_PROP_FRAME_WIDTH) << endl;cout << "CAP_PROP_FRAME_HEIGHT " << video.get(CAP_PROP_FRAME_HEIGHT) << endl;s = s / 2;int f = 0;for (;;){video.read(frame);if (frame.empty()) break;int cur = video.get(CAP_PROP_POS_FRAMES);if (cur > 90){video.set(CAP_PROP_POS_FRAMES, 0);continue;}imshow("video", frame);waitKey(s);}getchar();return 0;
}

八、通过VideoWrite的open创建视频文件并分析源码

VideoWriter

open

CV_WRAP virtual bool open(const String& filename, int fourcc, double fps,Size frameSize,bool isColor = true
);

create

static Ptr<IVideoWriter> create(const String& filename, int fourcc, double fps,Size frameSize, bool isColor = true
);

fourcc格式

九、通过VideoWrite的write创建视频文件并分析源码

VideoWriter

write

CV_WRAP virtual void write(const Mat& image);

writeFrame

十、以h264格式录制并预览摄像机视频代码演示

摄像头打开失败的几个原因

openH264dll少了

openh264开源地址

源码

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{VideoCapture cam(0);if (!cam.isOpened()){cout << "cam open failed!" << endl;getchar();return -1;}cout << "cam open success!" << endl;namedWindow("cam");Mat img;VideoWriter vw;int fps = cam.get(CAP_PROP_FPS);if (fps <= 0)fps = 25;vw.open("out.avi",VideoWriter::fourcc('X', '2', '6', '4'),fps,Size(cam.get(CAP_PROP_FRAME_WIDTH),cam.get(CAP_PROP_FRAME_HEIGHT)));if (!vw.isOpened()){cout << "VideoWriter open failed!" << endl;getchar();return -1;}cout << "VideoWriter open success!" << endl;for (;;){cam.read(img);if (img.empty())break;imshow("cam", img);vw.write(img);if (waitKey(5) == 'q') break;}waitKey(0);return 0;
}

十一、使用ffmpeg工具实现音频抽取、剪切和与视频

使用ffmpeg工具抽取音频

ffmpeg.exe -i 1.avi -vn 1.mp3

-i表示源
-vn表示不转换视频

使用ffmpeg剪切音频

ffmpeg -ss 0:0:30 -t 0:0:20 -i input.mp -c copy output.mp3

使用ffmpeg工具音视频合并

ffmpeg.exe -i 1.mp3 -i 1.mp4 -c copyout.mp4

=========================================
要源码的请私密

[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV视频lO接口相关推荐

  1. [笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV vs2015编译

    参考 文章目录 一.环境 二.cmake构建 2.1 打开cmake-gui 2.2 配置路径 2.3 点击Configure 2.3.1 选择编译器和编译平台 2.4 再点击Configure 2. ...

  2. FFmpeg和SDL实现视频播放器之 ⌈音视频同步⌋

    FFmpeg简易播放器流程图 音视频同步的目的是为了使播放的声音和显示的画面保持一致. 视频按帧播放,图像显示设备每次显示一帧画面,视频播放速度由帧率确定,帧率指示每秒显示多少帧: 音频按采样点播放, ...

  3. android手机视频编辑,美册视频编辑剪辑制作

    美册视频编辑剪辑制作是一款非常靠谱的手机视频编辑软件,这款软件内含各种强大的功能,可以随意的挑选使用,美册视频编辑剪辑制作操作简单,只需要简单的上传素材就可以直接编辑生成视频,对美册视频编辑剪辑制作感 ...

  4. 【Shotcut】开源免费视频编辑软件 - 微信视频编辑利器

    博文目录 一.Shotcut是什么?有什么特点? 二.Shotcut下载.安装 2.1 官网下载 2.2 Shotcut安装 2.3 Shotcut启动 三.编辑一个简单的微信视频号 3.1 设置项目 ...

  5. 视频编辑王(视频剪辑软件)

    介绍: 1.   制作精彩视频不仅能够帮您制作专业视频,还可以帮用户制作有趣的家庭视频:除裁切.合并.旋转.快进等功能外,其内置强大的特效能够让您丰富精彩的生活,栩栩如生的呈现.2.   装点日常生活 ...

  6. android 视频编辑特效,特效视频剪辑编辑

    特效视频剪辑编辑app是一款完全免费的安卓视频编辑神器.特效视频剪辑编辑功能上很齐全,特效视频剪辑编辑app服务也很不错,最关键的是特效视频剪辑编辑操作起来难度不是很大! 软件介绍 特效视频剪辑编辑a ...

  7. FFMPEG Qt录屏软件开发之视频采集

    前面讲解了视频播放器的开发,初步掌握了使用FFMPEG解码音视频. 现在我们就接着讲解使用FFMPEG来编码音视频,主要是实现一个录屏软件的制作. 一个录屏软件的流程基本就是: 图像采集 图像编码 将 ...

  8. 当前计算机主流的视频编辑方式,电脑视频剪辑软件排名 lightworks上榜 第一独创性强...

    在这个以分享为乐趣的时代,相信大家总有那么一个时刻想把自己看到的画面用剪辑的方式呈现出来与好友分享,那么就让排行榜小编为大家简要介绍电脑视频剪辑软件排名以方便大家用剪辑的方式呈现自己心中最美的风景. ...

  9. 怎么用视频编辑软件去掉视频中的水印

    我们在网络上下载的视频,一般都会带有各种各样的水印.如果我们觉得这些水印对我们制作效果有影响想要去掉,那么该怎么做的呢?大多数的朋友肯定觉得EDIUS是可以做到的,就像PS那样可以去掉我们不需要的水印 ...

最新文章

  1. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
  2. 在 Python 中妙用短路机制
  3. Spring 的@Bean 的用法
  4. buildroot 问题
  5. python基础—循环基础知识点
  6. python多进程打印字符,加锁(Lock加锁)
  7. linux之ftp怎么把本地文件拷贝到服务端
  8. LeetCode 1073. 负二进制数相加(负数进制)
  9. java8 stream多次map_java8streamapi:如何将列表转换为在列表中具有重复键的MapLong,Set?...
  10. Linux下 JNI的使用
  11. 通过telnet自动下载cfg配置文件
  12. mysql server再次安装失败_MySQL在windows上多次安装失败
  13. Spring Boot 2.0.3 使用外置 Tomcat 服务器
  14. paip.提升用户体验------c++ 拖曳使用总结..
  15. aforge java_C#使用Aforge调用摄像头拍照的方法
  16. 虚拟钢琴键盘音源合集 Toontrack EZkeys Complete 1.2.5 WiN-MAC
  17. 逃出你的肖申克(五):看不见的牢笼(上)
  18. uefi下的开机顺序_解答bios设置硬盘启动顺序的操作教程
  19. HNOI2015 亚瑟王
  20. html横幅设置,如何控制HTML横幅的宽度和高度?

热门文章

  1. word中添加续表和合并续表
  2. [mysql]my.cnf在哪里
  3. RSA解密-提供enc和pem文件类
  4. Citrix 相关资料整理
  5. 论文阅读笔记:Geography-Aware Sequential Location Recommendation
  6. 一文带你吃透操作系统
  7. C语言实现当前时间的前后多少秒的时间计算
  8. 图表——SM2密钥协商与ECMQV对比
  9. 一句代码让电脑定时重启,关机,取消关机
  10. jimu Mirror,加速你的 Android UI 开发