视频质量检测(2)--画面冻结检测

本文主要介绍视频画面冻结的检测。
1、视频画面冻结的定义
关于冻结的认知有两种:(1)时间流和画面均定格不动;(2)时间流在走,画面定格不动。
2、检测算法
一般采用区域直方图相似度对比或者像素差异对比,达到一定的阈值TH后认为该帧满足冻结判定,连续N帧后判定画面冻结。但直方图的方式,本人认为有较大误差,毕竟只考虑分布像素的的数量,忽略了位置,故误差较大,容易误报。本文实现像素差异对比的算法。
3、原理介绍
通常摄像头采集的连续两帧画面,肉眼看起来一致,但受环境光、感光元器件、电信号转换等的影响,会有一定的差异,利用该差异可以判定该像素位置是否变化。该方法可以有效避免画面背景单一、目标长时间不动造成的误报。
通过实验可以得到同一像素位置的差异值 T,对连续获得的视频帧做差分,统计变化的像素个数NUMBER,达到一定的比例后,认为当前帧画面变化,否则认为当前帧冻结,累计N帧后判定监控画面冻结。
4、代码实现

Mat baseimg;   //全局变量
int T = 10;   //假设同一像素位置的变化范围为10
void ViewFreeze2(Mat src, float &k)
{
	if (baseimg.empty())
	{
		baseimg = src.clone();
		k = 0;
		return;
	}
	Mat src_gray, base_gray;
	cvtColor(src, src_gray, CV_BGR2GRAY);
	cvtColor(baseimg, base_gray, CV_BGR2GRAY);

	int NUM = 0;
	for (int i = 0; i < src_gray.rows;i++)
	{
		uchar*ptr1 = src_gray.ptr<uchar>(i);
		uchar*ptr2 = base_gray.ptr<uchar>(i);

		for (int j = 0; j < src_gray.cols; j++)
		{
			if (abs(ptr1[j]-ptr2[j]>T))
				NUM++;
		}
	}
	k = (float)NUM / (src_gray.rows*src_gray.cols);
}

本人希望在分享过程中与各位共同学习、共同提高!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mirinda_cjy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值