openCV RunningAvg 实现

标签 opencv python-2.7 ubuntu-12.04

我正在编写一个小脚本(用 Python 编写),用于生成和更新相机馈送的运行平均值。当我调用 cv.RunningAvg 时,它返回:

cv2.error: func != 0

我在实现 cv.RunningAvg 时遇到了什么问题?脚本如下:

import cv

feed = cv.CaptureFromCAM(0)
frame = cv.QueryFrame(feed)
moving_average = cv.QueryFrame(feed)
cv.NamedWindow('live', cv.CV_WINDOW_AUTOSIZE)

def loop():
    frame = cv.QueryFrame(feed)
    cv.ShowImage('live', frame)
    c = cv.WaitKey(10)

    cv.RunningAvg(frame, moving_average, 0.020, None)

while True:
    loop()

最佳答案

我不确定错误,但请查看 cv.RunningAvg 的文档

它说目标应该是 32 位或 64 位 float 。

所以我对您的代码做了一个小的修正,它起作用了。我创建了一个32 位浮点图像来存储运行平均值然后是另一个 8 位图像以便我可以显示运行平均值图像:

import cv2.cv as cv

feed = cv.CaptureFromCAM(0)
frame = cv.QueryFrame(feed)
moving_average = cv.CreateImage(cv.GetSize(frame),32,3) # image to store running avg
avg_show = cv.CreateImage(cv.GetSize(frame),8,3) # image to show running avg

def loop():
    frame = cv.QueryFrame(feed)
    c = cv.WaitKey(10)

    cv.RunningAvg(frame, moving_average, 0.1, None)
    cv.ConvertScaleAbs(moving_average,avg_show) # converting back to 8-bit to show

    cv.ShowImage('live', frame)
    cv.ShowImage('avg',avg_show)

while True:
    loop()

cv.DestroyAllWindows()

现在看结果:

在特定时刻,我保存了一个帧及其对应的运行平均帧。

原始框架:

enter image description here

你可以看到障碍物(我的手)挡住了后面的物体

现在运行平均帧数:

enter image description here

它几乎移开我的手并在背景中显示对象。

这就是为什么它是背景减除的好工具

另一个来自典型交通视频的示例:

enter image description here enter image description here

您可以在此处查看更多详细信息和示例:http://opencvpython.blogspot.com/2012/07/background-extraction-using-running.html

关于openCV RunningAvg 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561912/

相关文章:

python-2.7 - 在循环中合并 DataFrame

python - 在由多个元素组成的列表列表中查找项目

java - 如何从使用netbeans编写的java代码访问shell脚本文件中的变量值

opencv - 在 Ubuntu 12.04 上安装 OpenCV

Java - Highgui.imread 返回一个空矩阵

python - 给定圆心的半径和坐标,如何获得圆区域内像素的像素中位数?

python - 从python中的子进程返回一个变量值

linux - SPIKE 模糊器在 ubuntu 上出现 LD_LIBRARY_PATH 问题

带有opencv异常的c++动态分配

c++ - 如何使用 OpenCV triangulatePoints