Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openCV运行AVG实现_Opencv_Python 2.7_Ubuntu 12.04 - Fatal编程技术网

openCV运行AVG实现

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

我正在编写一个小脚本(用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()

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

它说目标应该是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()

您可以在此处查看更多详细信息和示例: