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

博客介绍了OpenCV专门操作视频的接口类VideoCapture,包括其构造方法、成员函数,如打开关闭视频、获取视频信息、读取和提取序列帧等操作,还提及了视频图像比较的两种方法:峰值信噪比和结构相似性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

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)

 

转载于:https://www.cnblogs.com/k5bg/p/11063655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值