【问题标题】:openCV RunningAvg implementationopenCV RunningAvg 实现
【发布时间】:2012-07-19 13:28: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()

【问题讨论】:

    标签: opencv python-2.7 ubuntu-12.04


    【解决方案1】:

    我不确定该错误,但请查看 cv.RunningAvg

    的文档

    它说目标应该是 32 位或 64 位浮点数。

    所以我对你的代码做了一个小的修正,它可以工作。我创建了一个 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()
    

    现在看看结果:

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

    原框架:

    You can see the obstacle (my hand) blocks the objects in behind.

    现在平均帧数:

    它几乎把我的手移开,并在背景中显示物体。

    it is a good tool for background subtraction就是这样。

    另一个典型交通视频的例子:

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

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2015-03-18
      • 2012-01-31
      • 2019-11-25
      • 2014-04-29
      • 2015-05-27
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多