ben*_*kay 1 opencv python-2.7 ubuntu-12.04
我正在编写一个小脚本(用Python编写),用于生成和更新摄像机源的运行平均值.当我调用cv.RunningAvg时,它返回:
cv2.error: func != 0
Run Code Online (Sandbox Code Playgroud)
我在实施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()
Run Code Online (Sandbox Code Playgroud)
Abi*_*n K 11
我不确定错误,但请查看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()
Run Code Online (Sandbox Code Playgroud)
现在看结果:
在特定时刻,我保存了一个帧及其相应的运行平均帧.
原框架:

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
| 归档时间: |
|
| 查看次数: |
4644 次 |
| 最近记录: |