基于Opencv的目标检测与跟踪阴影去除算法实现

在运动目标检测中,常常会出现由于光线被遮挡,或场景其他物体的遮挡,在目标附近或场景里出现阴影,阴影的出现对后期目标的正确分割与处理带了很大的不便。如今,国内外已有不少文献来研究这个问题,并且提出了各种各样的阴影去除算法。本文就其中的一种算法提出了一个通用的实现算法,该算法考虑了背景与前景颜色相近的情况,希望能给大家一些帮助:(介绍下算法的思路:算法首先对RGB颜色空间的值进行归一化处理,即:r=R/(R+G+B),g=G/(R+G+B), I=(R+G+B)/3。然后利用背景和当前帧r,g的插值和I的比例来确定阴影区域:
                                                              基于Opencv的目标检测与跟踪阴影去除算法实现  
详细细节请参考文献:Detecting moving objects,ghosts and shadows in video streams
// shadeImg is a binary image,the value th2 and th3 are chosen empirically here,set th2=0.6 th3=1.5, th4=7
void ShadeDetect(IplImage *currImg, IplImage *bkImg, IplImage *shdadeImg,double th1,double th2,double th3,double th4)
{
       cvZero(shdadeImg);
       unsigned char* currData;
       unsigned char* bkData;
       unsigned char* shadeData;
       int i=0,j=0;
       int height=currImg->height;
       int width=currImg->width;
       double rb=0,gb=0,Ib=0,Rb=0,Gb=0,Bb=0;
       double rt=0,gt=0,It=0,Rt=0,Gt=0,Bt=0;
      //CvScalar cs=cvScalarAll(255);
       for (i=0;i<height;i++)
       {
             currData=(unsigned char*)currImg->imageData+i*currImg->widthStep;
             bkData=(unsigned char*)bkImg->imageData+i*bkImg->widthStep;
             shadeData=(unsigned char*)shdadeImg->imageData+i*shdadeImg->widthStep;
            for (j=0;j<width;j++)
           {
                // current normalized
                  Rt=currData[j*3];
                  Gt=currData[j*3+1];
                  Bt=currData[j*3+2];
                  rt=Rt/(Rt+Gt+Bt);
                  gt=Gt/(Rt+Gt+Bt);
                  It=(Rt+Gt+Bt)/3;
                 // Bk normalized
                 Rb=bkData[j*3];
                 Gb=bkData[j*3+1];
                 Bb=bkData[j*3+2];
                rb=Rb/(Rb+Gb+Bb);
                gb=Gb/(Rb+Gb+Bb);
                Ib=(Rb+Gb+Bb)/3;
              // judge whether is shadeimg
              if (fabs(rt-rb)<=th1 && fabs(gt-gb)<th1 && It/Ib>=th2 && It/Ib<=th3 && fabs(It-Bt)<th4)
             {
                    shadeData[j]=255;
             }  
       }
   }
}
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: OpenCV是一个开源的计算机视觉库,可以用于实现运动目标检测跟踪实现要求包括: 1. 视频捕获:使用OpenCV读取视频文件或摄像头输入。 2. 背景减除:使用背景减除算法(如MOG2)去除背景,以便更好地检测运动目标。 3. 运动目标检测:使用运动目标检测算法(如背景差分)检测运动目标。 4. 跟踪:使用跟踪算法(如KCF)跟踪运动目标。 5. 显示结果:在视频中标记出运动目标并显示跟踪结果。 ### 回答2: 基于OpenCV的运动目标检测跟踪实现要求如下: 1. 需要实现一种基于帧间差法或背景建模的运动目标检测算法。帧间差法是通过计算相邻帧之间像素的差异来判断是否存在运动目标,背景建模则是通过对连续帧的像素值进行统计分析,建立背景模型,再根据像素值与背景模型的偏差来判断是否存在运动目标。 2. 运动目标检测过程中,要能够对运动目标进行二值化处理,即将目标与背景分离,方便后续的跟踪。可以使用简单的阈值分割方法,将超过阈值的像素点认定为前景目标。 3. 需要实现一种运动目标跟踪算法,使得目标能够在连续帧中被准确地追踪。常用的跟踪算法包括卡尔曼滤波、均值漂移、粒子滤波等。选择合适的跟踪算法可以保证目标在运动、遮挡等情况下依然能够被准确追踪。 4. 运动目标检测跟踪的整个实现过程需要基于OpenCV的功能和库来完成。OpenCV是一个广泛使用的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。能够利用其中的函数、类和方法来实现运动目标检测跟踪。 5. 最终的实现要求能够对视频或摄像头的实时输入进行处理,并准确地检测和跟踪运动目标。可以通过绘制边界框或标记运动目标来展示检测和跟踪的结果,以便用户进行观察和分析。 总之,基于OpenCV的运动目标检测跟踪实现要求需要实现运动目标的检测算法,对目标进行二值化处理,实现准确的目标跟踪算法,并利用OpenCV库来完成整个实现过程。最终能够对视频或摄像头输入进行实时处理,并展示检测和跟踪的结果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值