实践5 视频运动目标检测:帧差法的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实践5 视频运动目标检测:帧差法的实现

实验任务:

根据原理,获取并显示两幅图像的帧差灰度图和帧差二值图,如下图所示。

实现的算法是:

(1)分别读取两张图像;

(2)将2张图像分别转换为灰度图,转换函数可用:cvCvtColor/cvtColor;

(3)将2张灰度图相减(求差值),得到帧差灰度图,相减函数可用:cvAbsDiff/absdiff;(4)利用阈值操作,将帧差灰度图转化为帧差二值图,阈值操作函数可用:cvThreshold/threshold;(如果假设目标设定为白色,背景设定为黑色,则需要使用逻辑“非”操作进行颜色转换,可使用cvNot/bitwise_not函数);

(5)显示图像。

请将上述任务改成找茬游戏的自动找茬功能。

请改为三帧差分,并上交源代码。

函数解析:

(1)cvCvtColor/cvtColor

C: void cvCvtColor( const CvArr* src, CvArr* dst, int code );

C++:void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

src 输入的8-bit,16-bit或32-bit单倍精度浮点数影像。

dst 输出的8-bit,16-bit或32-bit单倍精度浮点数影像。

code色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空间。常见的code模式有:

CV_RGB2GRAY(彩色图像-灰度图像)

CV_BGR2YCrCb

CV_RGB2YCrCb

CV_YCrCb2BGR

CV_YCrCb2RGB

CV_BGR2HSV

CV_RGB2HSV

CV_HSV2BGR

CV_HSV2RGB

(2)cvAbsDiff/absdiff

OpenCV 中计算两个数组差的绝对值的函数。

void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );

src1 第一个原数组(第一张图像)

src2 第二个原数组(第二张图像)

dst输出数组(输出的帧差图像)

函数cvAbsDiff 计算两个数组差的绝对值,其数学原理为:

dst(I)c = abs(src1(I)c - src2(I)c).

所有数组必须有相同的数据类型相同的大小(或ROI大小)。

(3)cvThreshold/threshold

作用:函数cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像。

void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double

max_value, int threshold_type );

src:原始数组(单通道, 8-bit of 32-bit 浮点数)。dst:输出数组,必须与src 的类型一致,或者为8-bit。

threshold:阈值

max_value:使用CV_THRESH_BINARY 和CV_THRESH_BINARY_INV 的最大值。

threshold_type:阈值类型

threshold_type=CV_THRESH_BINARY:

如果src(x,y)>threshold ,dst(x,y) = max_value; 否则,des(x,y)=0;

threshold_type=CV_THRESH_BINARY_INV:

如果src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.

本函数支持的对图像取阈值的方法由threshold_type 确定:

threshold_type=CV_THRESH_BINARY:

dst(x,y) = max_value, if src(x,y)>threshold 0, otherwise.

threshold_type=CV_THRESH_BINARY_INV:

dst(x,y) = 0, if src(x,y)>threshold; dst(x,y) = max_value, otherwise.

threshold_type=CV_THRESH_TRUNC:

dst(x,y) = threshold, if src(x,y)>threshold; dst(x,y) = src(x,y), otherwise.

threshold_type=CV_THRESH_TOZERO:

dst(x,y) = src(x,y), if (x,y)>threshold ; dst(x,y) = 0, otherwise.

threshold_type=CV_THRESH_TOZERO_INV:

dst(x,y) = 0, if src(x,y)>threshold ; dst(x,y) = src(x,y), otherwise.

相关文档
最新文档