目标是检测一个物体(可以是多个)在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的一个选择。我可以考虑的任何其他选择
答案 0 :(得分:0)
听起来像optical flow。你可以OpenCV implementation。将您的积分与下一张图片一起传递到cv::calcOpticalFlowPyrLK
(请参阅here)。然后你可以检查点之间的距离和自杀该怎么做。
我不知道它是否有效,只是一个想法。