几个视频帧的Blob位置比较

时间:2016-08-22 16:27:51

标签: matlab opencv image-processing

目标是检测一个物体(可以是多个)在ROI中是否静止一段时间(应用:阻止斑马线检测)。所以它意味着在时间t上观察每个blob

  • 输入=视频文件

所以,让我们说人行横道是投资回报率。背景减法仅在ROI内部发生,然后如果在那里一动不动,则每个blob(车辆)将在时间t内单独观察。

我在想的是在第1帧和第n帧(时间阈值)获取blob的位置并检查位置是否相同。但是假设有多个blob,这必须应用于每个blob。因此,这里涉及一个循环来逐个处理每个blob。但是如何通过在第1帧和第n帧获得它的位置来处理每个blob,然后比较它是否相同(如果是这样那么它在时间t一直不动,因此它是“阻塞”)。然后转到下一个blob。

我的逻辑写在java代码上:

 //assuming "blobs" is an arraylist containing all the blobs in the image
   int initialPosition = 0, finalPosition = 0;
   static int violatorCount=0;
 for(int i=0; i<blobs.size(); i++){ //iterate to each blob to process them separately
     initialPosition = blobs.get(i).getPosition();
     for(int j=0; j<=timeThreshold; j++){
        if(blobs.get(i) == null){ //if blob is no longer existing on frame j
             break;
        }
        finalPosition = blobs.get(i).getPosition();
     }
     if(initialPosition == finalPosition){
        violatorCount++;
     }
  //output count on top-right part of window
 }

你能否分享一下如何在Matlab或OpenCV中实现目标/想法的逻辑?

光学流程是PSchn的一个选择。我可以考虑的任何其他选择

1 个答案:

答案 0 :(得分:0)

听起来像optical flow。你可以OpenCV implementation。将您的积分与下一张图片一起传递到cv::calcOpticalFlowPyrLK(请参阅here)。然后你可以检查点之间的距离和自杀该怎么做。

我不知道它是否有效,只是一个想法。