小编Kev*_*vin的帖子

为我的算法创建一个使用Opencv 2.3的Python包装器

我想要包装一个c ++类,它实现了我用Opencv 2.3编写的算法.我知道opencv作为一个整体有python包装器,但我需要的是包装我自己的使用opencv的代码.这似乎是合乎逻辑的,因为我的算法的较低级别将是快速编译的c ++代码,我可以自由地从python调用它并围绕它构建一个系统.

我的课其实很简单,有4种主要方法:

  void train( std::vector<cv::Mat> );
  void save();
  void load();
  bool detect( cv::Mat );
Run Code Online (Sandbox Code Playgroud)

这基本上是我需要包装的大部分内容.问题是我不知道如何最好地解决这个问题.我已经研究过ctypes,swig,boost python和pyplusplus.到目前为止,我还没有成功.

我一直遇到如何包装opencv对象cv :: Mat的问题.从python我将使用numpy数组,所以我知道我需要从numpy数组到cv :: Mat的转换代码,我必须注册它.

我觉得别人一定要尝试过这样的东西,如果你能帮助我,我会非常感激


重申一下目标:将使用opencv的c ++类包装到python库中,以便我可以使用python中的算法.

我想我的转换有点想通了(在opencv源的帮助下)但我仍然无法使用python.

好的,所以我一直在处理上面帖子中链接的代码(从numpy到cv :: Mat的转换),我仍然遇到问题.我将发布我的代码,希望有更多知识渊博的人,我可以帮助我.

例如,这是一个简单的类:

foo.h:

#include <opencv2/core/core.hpp>

 class Foo {
    public:
        Foo();
        ~Foo();

        cv::Mat image;

        void bar( cv::Mat in );
}; 
Run Code Online (Sandbox Code Playgroud)

foo.cpp:

  #include "foo.h"

  Foo::Foo(){}

  Foo::~Foo(){}

  void Foo::bar( cv::Mat in) {
      image = in;
      cv::Canny( image, image, 50, 100 );
      cv::imwrite("image.png", image);
  }
Run Code Online (Sandbox Code Playgroud)

这里是我尝试使用boost :: python和上面链接中的代码来包装此类的地方:

wrap_foo.cpp

#include <boost/python.hpp>
#include <numpy/arrayobject.h>

#include …
Run Code Online (Sandbox Code Playgroud)

python swig boost opencv wrapper

5
推荐指数
1
解决办法
1244
查看次数

wxpython定时器事件间隔

我试图用wx python编写一个gui应用程序,我需要控制计时器事件的间隔.这是我目前的代码:

self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.on_timer, self.timer)        
self.timer.Start(750) # start timer after a delay
Run Code Online (Sandbox Code Playgroud)

这是正确的框架,但我无法控制EVT_TIMER发生的间隔或频率.我一直试图找出使用wx TimerEvent类但没有任何运气.我觉得这应该是我需要的,但它不起作用:

self.timer = wx.Timer(self)
self.timerEvent = wx.TimerEvent(self.timer.GetId(),10)
self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) 
Run Code Online (Sandbox Code Playgroud)

谢谢!

wxpython

4
推荐指数
1
解决办法
8894
查看次数

标签 统计

boost ×1

opencv ×1

python ×1

swig ×1

wrapper ×1

wxpython ×1