OpenCV2:幼儿园篇 第八章 视频操作

一.简介

OpenCV提供了专门操作视频的接口类VideoCapture

 

二.构造VideoCapture类

VideoCapture::VideoCapture()

VideoCapture::VideoCapture(const string& filename)

VideoCapture::VideoCapture(int device)

  • filename

输入视频文件的路径名称

  • device

打开视频操作索引号设置:

摄像头设置为0

 

三.VideoCapture类成员函数

VideoCapture::grab  抓住下一帧的视频文件或捕获设备

VideoCapture::retrieve  解码并返回视频帧


VideoCapture& VideoCapture::operator >> (Mat& image)

 

1.打开关闭视频

VideoCapture::open         打开视频文件或视频获取装置

VideoCapture::isOpened  判断视频文件读取是否正确,返回true则正确

VideoCapture::release  关闭视频流文件

 

 

2.视频信息

videoCapture::get   返回指定视频类的相关参数信息

VideoCapture::set  设置类信息的一个属性

 

3.读取序列帧

bool VideoCapture::read(Mat& image)  //解码返回下一个视频帧

 

 

4.提取序列帧

VideoWriter

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include "opencv2/opencv.hpp"
 
using namespace std;
using namespace cv;
 
int main(int argc, char* argv[])
{
 
    // 打开第一个摄像头
    // VideoCapture cap(0);
 
    // 打开视频文件
    VideoCapture cap("k1.avi");
 
    // 检查是否成功打开
    if (!cap.isOpened())
    {
        cerr << "Can not open a camera or file" << endl;
        return -1;
    }
 
    Mat edges;
    // 创建窗口
    namedWindow("edges", 1);
 
    for(;;)
    {
        Mat frame;
 
        // 从cap中读一帧,存到frame
        cap >> frame;
 
        // 如果未读到图像
        if (frame.empty())
            break;
 
        // 将读到的图像转为灰度图
        cvtColor(frame, edges, CV_BGR2GRAY);
 
        // 进行边缘提取操作
        Canny(edges, edges, 0, 30, 3);
 
        // 显示结果
        imshow("edges", frame);
 
        // 等待30秒,如果按键则退出循环
        if (waitKey(30) >= 0)
            break;
    }
 
    // 退出时会自动释放cap中占用资源
    return 0;
}

 

 

四.视频图像比较

图像相似度主要是对两幅图像内容的相似程度进行打分,根据分数的高低来判断图像内容的相似程度.

图像比较有两种方法:峰值信噪比(PSNR,Peak Signal to Noise Ratio)和结构相似性(SSIM,tructural similarity index)

 

posted @   言午丶  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示