【OpenCV】视频输入与相似度测量

本篇博客主要介绍如何使用OpenCV进行视频输入,并利用PSNR和SSIM两种方法测量视频帧之间的相似度。通过cv::VideoCapture函数读取视频流,对比不同帧的峰值信噪比(PSNR)和结构相似指数(SSIM)。文章提供测试视频链接,并探讨了SSIM相比于PSNR在计算成本上的差异。
摘要由CSDN通过智能技术生成

视频输入

  与之前的博客内容不同,本节处理的是视频流而非图像集。视频流来源可以是摄像头的实时图像反馈、已拍摄存储的视频。OpenCV可以读取这两种类型的视频流并采用RSNP和SSIM检查图像的相似度,使用函数为 cv::VideoCapture 。

  本节的测试视频下载地址:
https://github.com/opencv/opencv/blob/master/samples/data/Megamind.avi
https://github.com/opencv/opencv/blob/master/samples/data/Megamind_bugy.avi

  参考链接:https://docs.opencv.org/master/d5/dc4/tutorial_video_input_psnr_ssim.html


相似度测量

  视频的转换操作是难以察觉的,因此通过帧与帧间的差异来测量相似度。

  常用的方法是峰值信噪比PSNR(Peak signal-to-noise ratio),记I1、I2是输入的两幅图像,i,j是二维图像的大小,c是通道数量。


  SSIM方法在代码中可以推出,由于使用了多次高斯平滑,其开销较大。运行结果相同时,SSIM用时会比PSNR多得多。PSNR可以为每一帧执行相似度测量,而SSIM仅被用于测量PSNR低于输入值的帧。


代码示例

#include <iostream>
#include <string>
#include <iomanip>                  // 控制浮动类型的打印精度
#include <sstream>                  // 字符串和数值的转换

#include <opencv2/core.hpp>         // CV::Mat,Scalar
#include <opencv2/imgproc.hpp>      // 高斯平滑
#include <opencv2/videoio.hpp>      // 视频
#include <opencv2/highgui.hpp>      

using namespace std;
using namespace cv;

double getPSNR(const Mat& I1, const Mat& I2);
Scalar getMSSIM(const Mat& I1, const Mat& I2);

int main(int argc,char *argv[])
{
    const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值