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

 

#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 @ 2019-06-21 11:35  言午丶  阅读(247)  评论(0编辑  收藏  举报