openCV运行AVG实现
我正在编写一个小脚本(用Python),它生成并更新相机提要的运行平均值。当我调用cv.RunningAvg时,它返回:openCV运行AVG实现,opencv,python-2.7,ubuntu-12.04,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_WI
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()
我不确定该错误,但请查看 它说目标应该是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()
现在看看结果:
在某一特定时刻,我保存了一个帧及其对应的运行平均帧
原始帧:
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()
你可以看到障碍物(我的手)挡住了后面的物体
现在运行平均帧:
它几乎去掉了我的手,并在背景中显示了对象
这就是为什么它是一个很好的背景减法工具
典型交通视频中的另一个示例:
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()
您可以在此处查看更多详细信息和示例:我不确定错误,但请查看文档以了解
它说目标应该是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()
现在看看结果:
在某一特定时刻,我保存了一个帧及其对应的运行平均帧
原始帧:
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()
你可以看到障碍物(我的手)挡住了后面的物体
现在运行平均帧:
它几乎去掉了我的手,并在背景中显示了对象
这就是为什么它是一个很好的背景减法工具
典型交通视频中的另一个示例:
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()
您可以在此处查看更多详细信息和示例: