从Python中的BackgroundSubtractorMOG2获取背景模型

2023-11-27

我需要获得高斯与 opencv 混合的背景模型。我知道 C++ 中有一个名为 getBackgroundImage 的方法,我搜索了是否可以在 python 界面中获取它,但没有得到好的结果。我尝试了opencv 3.0.0-dev,因为它有BackgroundSubtractorMOG2实现,但help()函数没有记录后台模型的方法实现。您知道是否存在未记录的实施吗?我搜索了如何编辑 opencv 源代码来实现 python 实现,但我还没有找到有关它的文档。我更喜欢避免使用 scipy.weave 来编译 C++ 代码,而且我不知道 scipy.weave 在这种情况下是否有用


Adapted Zaw Lin的解决方案

  • 乌班图18.04
  • OpenCV 3.2 通过安装apt install libopencv-dev

主要区别在于结果(fg / bg)图像在 python 中创建/分配,然后传递到 c++ lib。 Zaw Lin 的解决方案给了我错误(errno 139 - SIG_SEGV),因为应用程序正在访问无效的内存区域。希望它能为某人节省几个小时:)

mog2.cpp:

#include <opencv2/opencv.hpp>

cv::BackgroundSubtractorMOG2 *mog = cv::createBackgroundSubtractorMOG2 (500, 16, false);

extern "C" void getfg(int rows, int cols, unsigned char* imgData,
        unsigned char *fgD) {
    cv::Mat img(rows, cols, CV_8UC3, (void *) imgData);
    cv::Mat fg(rows, cols, CV_8UC1, fgD);
    mog->apply(img, fg);
}

extern "C" void getbg(int rows, int cols, unsigned char *bgD) {
    cv::Mat bg = cv::Mat(rows, cols, CV_8UC3, bgD);
    mog->getBackgroundImage(bg);
}

像这样编译它:

gcc  \
    -shared \
    -o libmog2.so  \
    -fPIC ./mog2.cpp  \
    -lopencv_core -lopencv_highgui -lopencv_objdetect -lopencv_imgproc -lopencv_features2d -lopencv_ml -lopencv_calib3d -lopencv_video

然后是Python:

mog2.py

import numpy as np
import ctypes as C
import cv2

libmog = C.cdll.LoadLibrary('path/to/libmog2.so')

def getfg(img):
    (rows, cols) = (img.shape[0], img.shape[1])
    res = np.zeros(dtype=np.uint8, shape=(rows, cols))
    libmog.getfg(img.shape[0], img.shape[1],
                       img.ctypes.data_as(C.POINTER(C.c_ubyte)),
                       res.ctypes.data_as(C.POINTER(C.c_ubyte)))
    return res


def getbg(img):
    (rows, cols) = (img.shape[0], img.shape[1])
    res = np.zeros(dtype=np.uint8, shape=(rows, cols, 3))

    libmog.getbg(rows, cols, res.ctypes.data_as(C.POINTER(C.c_ubyte)))
    return res


if __name__ == '__main__':
    c = cv2.VideoCapture(0)
    while 1:
        _, f = c.read()
        cv2.imshow('f', f)
        cv2.imshow('fg', getfg(f))
        cv2.imshow('bg', getbg(f))
        if cv2.waitKey(1) == 27:
            exit(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从Python中的BackgroundSubtractorMOG2获取背景模型 的相关文章

随机推荐

  • 如何在 SQLExpress 文本字段中插入中文字符?

    如何在 SQLExpress 文本字段中插入中文字符 我使用的是 VS 2008 中的 SQL Express 当我添加中文字符时 无论是通过我编写的导入应用程序还是从 Visual Studio 内的数据视图粘贴它们 它们最终都会变成问号
  • View.OnClickListener() 函数或接口

    View OnClickListener 是函数还是接口 当我们尝试在 android 中设置 onclicklistener 方法时 我们使用 new View OnClickListener 据我所知 它让我感到烦恼 我们不需要初始化包
  • 回调函数的用处

    在 Javascript 中 可以定义一个函数 X 并将其作为参数传递给另一个函数 Y 这样的函数 X 称为callback function 您能否解释为什么在一些清晰的示例中使用回调函数很有用 例如发送一些带有演示的小提琴链接 我可以看
  • 根据文本区域的宽度计算文本大小

    我有一个文本应该设置为具有指定宽度的 TextView 它需要计算文本大小以适合 TextView 换句话说 有没有办法让文本适合 TextView 区域 就像 ImageView 比例类型功能一样 这应该是一个简单的解决方案 public
  • 如何使用 Objective-C++ 在 C++ 类中添加观察者到 NSNotificationCenter?

    我有一个 C 类 最近从 cpp 重命名为 mm 以支持 Objective C 所以我可以添加以下 Objective C 代码 NSNotificationCenter defaultCenter addObserver self se
  • 使用 Razor 的条件 HTML 属性

    变量 strCSSClass 通常有一个值 但有时为空 我不想在此输入元素的 HTML 中包含空的 class 这意味着如果 strCSSClass 为空 我根本不需要 class 属性 以下是执行条件 HTML 属性的一种方法
  • Spring@计划于每天凌晨 4:00 至 4:30 之间的随机分钟开始

    正如问题标题所述 我需要设置 Spring Scheduler 它将运行方法以每天凌晨 4 点左右将某些内容从数据库加载到内存中 问题是我有该服务器的多个实例 我不希望所有实例同时开始执行 因为它会减慢数据库的速度 所以我希望时间是 4 0
  • 如何将 UWP 目标添加到现有 Xamarin Forms 项目?

    我有一个现有的 Xamarin Forms 应用程序 设置为针对 Android 和 iOS 构建 我想添加 UWP 目标 以便可以查看应用程序在 Windows 上的执行情况 我想我可以做到这一点 而无需为 Windows 创建新的 UI
  • Egit 将 Eclipse 项目文件夹添加到 git 存储库

    我在 BitBucket 上创建了一个新的空 git 存储库 现在我想将其链接到 Eclipse 我将存储库添加到 Git Repositories 视图中 并创建了一个同名的新项目 我选择 团队 gt 共享项目 然后提交并推送到上游 现在
  • 更新 RestKit 'lcl_RK.h' 文件在 RKLog.h 中找不到

    我在 Xcode 7 1 中安装 RestKit v0 25 0 和 CocoaPods v0 39 并遇到导入问题 当我使用 CocoaPods v0 38 2 时 一切都很棒 找不到 RKHTTPUtilities h 文件 它在 PO
  • numpy数组赋值问题

    我在使用 Numpy 的 Python 2 6 5 中遇到了一个奇怪的问题 我分配一个 numpy 数组 然后将一个新变量等同于它 当我对新数组执行任何操作时 原始数组的值也会发生变化 这是为什么 请看下面的例子 请启发我 因为我对 Pyt
  • R 求和向量列表中的元素 X

    我刚刚开始做一些 R 脚本 但我无法解决这个问题 我有一个向量列表可以说 myListOfVector lt list c 1 2 c 1 2 c 1 2 c 1 2 我想要的是列表中每个向量的每个 X 元素的总和 基于元素的位置 这样 如
  • 在c中生成具有特定分布的随机数

    我需要一个具有生成随机数 给定平均值 标准差以及使用三种分布之一 指数分布 正态分布或统一分布 的函数的库 即使三者之一也会有帮助 我正在寻找这样的东西 http www codeproject com KB recipes zigurat
  • 在 moment.js 中获取该月的最后一个星期一

    有没有办法使用 moment js 获取该月的最后一个星期一 我知道我可以通过以下方式得到月底 moment endOf month 但上周一怎么样 你快到了 您只需要添加一个简单的循环来逐天向后移动 直到找到星期一 result mome
  • BeginAccept 方法后无法关闭套接字

    我有一个 C 程序 在其中创建一个套接字 绑定它 开始监听 然后使用 beginaccept 但是当我尝试关闭 关闭套接字时 我从 beginaccept AsyncCallback 方法中得到异常 private void start l
  • 为什么我的 Java 中 char 和 int 之间的比较不起作用?

    char c 0 int i 0 System out println c i 为什么这总是返回 false 虽然这个问题很不清楚 但我很确定发帖者想知道为什么会这样打印false char c 0 int i 0 System out p
  • 使用扭曲和试用启动两个等效单元测试时,ReactorNotRestartable

    我有两个测试班 TrialTest1 and TrialTest2 写在两个文件中 test trial1 py and test trial2 py 基本相同 唯一的区别是类名 from twisted internet import r
  • javascript中引用和实例的区别

    有时我听到人们说 对象的引用 有些人说 对象的实例 有什么不同 A variable将举行参考 to an instance一个物体的 实际的对象是一个instance 用于访问对象的一个 或多个变量保存参考 to it
  • 使用 HLS 视频时,仅在 iOS 13 上使用 AVPlayerViewController 和 AVPlayer 时出现视频播放问题

    我有一个可以播放视频的应用程序 它与 iOS 11 12 和 iOS 13 兼容 在 iOS 11 和 12 上 视频播放可以正常使用AVPlayerViewController甚至只是AVPlayerLayer 然而 在 iOS 13 上
  • 从Python中的BackgroundSubtractorMOG2获取背景模型

    我需要获得高斯与 opencv 混合的背景模型 我知道 C 中有一个名为 getBackgroundImage 的方法 我搜索了是否可以在 python 界面中获取它 但没有得到好的结果 我尝试了opencv 3 0 0 dev 因为它有B