Ubuntu下为OpenCV配置wxWidgets/OpenGL以及三者混合编程
OpenCV的GUI部分做的太简单了 复杂的功能难以实现 整合其他库时接口兼容性等问题多多 真费事 写个手记以备用
安装和配置工程安装wxwidgets(http://wiki.wxwidgets.org/Installing_and_configuring_under_Ubuntu)
idle events首先要定义好显示opencv或opengl的面板派生类,本例中用的是BasicDrawPane和BasicGLPane(会在后面讲到)
class BasicGLPane : public wxGLCanvas{ wxGLContext*m_context;CModel3DS * monkey;public:BasicGLPane(wxFrame* parent, int* args);virtual ~BasicGLPane();void resized(wxSizeEvent& evt); void paintEvent(wxPaintEvent& evt);void paintNow();void render(wxDC& dc);DECLARE_EVENT_TABLE()};BEGIN_EVENT_TABLE(BasicGLPane, wxGLCanvas)EVT_PAINT(BasicGLPane::paintEvent) END_EVENT_TABLE()GLMmodel* pmodel1 = NULL;void BasicGLPane::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); render(dc);}void BasicGLPane::paintNow() { wxClientDC dc(this); render(dc);}BasicGLPane::BasicGLPane(wxFrame* parent, int* args) : wxGLCanvas(parent, wxID_ANY, args, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE){ m_context = new wxGLContext(this); // To avoid flashing on MSW SetBackgroundStyle(wxBG_STYLE_CUSTOM); int argc = 1; char* argv[1] = { wxString((wxTheApp->argv)[0]).char_str() }; glutInit(&argc, argv);//这里是opengl的初始化代码段 可以添加自己代码}BasicGLPane::~BasicGLPane() { delete m_context;}void BasicGLPane::resized(wxSizeEvent& evt) { Refresh();}void BasicGLPane::render(wxDC& dc) { if (!IsShown()) return; wxGLCanvas::SetCurrent(*m_context); wxPaintDC(this); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//这里是opengl的绘图代码段 可以添加自己代码 glFlush(); SwapBuffers();}