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

一.简介

OpenCV提供了专门操做视频的接口类VideoCaptureios

 

二.构造VideoCapture类

VideoCapture::VideoCapture()ide

VideoCapture::VideoCapture(const string& filename)函数

VideoCapture::VideoCapture(int device)spa

  • filename

输入视频文件的路径名称视频

  • device

打开视频操做索引号设置:blog

摄像头设置为0索引

 

三.VideoCapture类成员函数

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

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


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

 

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)

相关文章
相关标签/搜索