linux下编译支持opengl的opencv

最近在linux下编译opencv遇到一个问题,不能支持opencv。
按照网上的说法,只需要在运行cmake时,加入-D WITH_OPENGL=ON就行。但丝毫没有效果。
下面是cmake的输出

--   GUI: 
--     QT:                          NO
--     GTK+ 3.x:                    YES (ver 3.10.8)
--     GThread :                    YES (ver 2.40.2)
--     GtkGlExt:                    NO
--     OpenGL support:              NO
--     VTK support:                 NO

gtkglext这个库也安装了,但提示是NO。

看了一下opencv的cmake配置文件cmake/OpenCVFindLibsGUI.cmake,发现下面一段逻辑:

...
ocv_clear_vars(HAVE_GTK HAVE_GTK3 HAVE_GTHREAD HAVE_GTKGLEXT)
if(WITH_GTK AND NOT HAVE_QT)
  if(NOT WITH_GTK_2_X)
    CHECK_MODULE(gtk+-3.0 HAVE_GTK3)
    if(HAVE_GTK3)
      set(HAVE_GTK TRUE)
...
  if(NOT HAVE_GTK)
    CHECK_MODULE(gtk+-2.0 HAVE_GTK)
...
  if(WITH_OPENGL AND NOT HAVE_GTK3)
    CHECK_MODULE(gtkglext-1.0 HAVE_GTKGLEXT)
  endif()
endif()

# --- OpenGl ---
ocv_clear_vars(HAVE_OPENGL HAVE_QT_OPENGL)
if(WITH_OPENGL)
  if(WITH_WIN32UI OR (HAVE_QT AND QT_QTOPENGL_FOUND) OR HAVE_GTKGLEXT)
      find_package (OpenGL QUIET)
    if(OPENGL_FOUND)
      set(HAVE_OPENGL TRUE)
...
endif(WITH_OPENGL)

原来是机器里装了gtk3,所以HAVE_GTKGLEXT==FALSE,机器里恰巧又没有QT,所以没有去检查OpenGL项目。

看来是gtk3与gtkglext不兼容,为了支持opengl,只能使用gtk2了。在cmake的时候,再增加一个选项-D WITH_GTK_2_X=ON就OK了。下面是cmake的输出结果:

$ cmake -D WITH_GTK_2_X=ON -D WITH_OPENGL=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTLL_PREFIX=/usr/local ..
...
--   GUI: 
--     QT:                          NO
--     GTK+ 2.x:                    YES (ver 2.24.23)
--     GThread :                    YES (ver 2.40.2)
--     GtkGlExt:                    YES (ver 1.2.0)
--     OpenGL support:              YES (/usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libSM.so /usr/lib/x86_64-linux-gnu/libICE.so /usr/lib/x86_64-linux-gnu/libX11.so /usr/lib/x86_64-linux-gnu/libXext.so)
--     VTK support:                 NO
...

推荐阅读更多精彩内容