OpenCV學習筆記(六十一)——建立支援OpenGL的OpenCV工程“Master OpenCV”chp.3

來源:互聯網
上載者:User

從OpenCV2.4beta版本,OpenGL就可以有介面到highgui的模組中了。結合Master OpenCV第三章的閱讀,這裡說說如何在OpenCV的顯示中嵌入OpenGL的虛擬物體。

要注意的一點:如果想使OpenCV支援OpenGL,不能使用先行編譯好的library,要用cmake rebuild工程,注意ENABLE_OPENGL = YES,(在2.4.2版本中,預設ENABLE_OPENGL = NO),標籤的改變在CMake的進階版本都是圖形介面的,只需把WITH_OPENGL的對號勾選即可。

這裡實戰過程中我還遇到了一個問題,用這個CMake得到的vs工程(添加了WITH_OPENGL)無法編譯通過,鬱悶了好久。因為opengl在vs中是支援的,不需要安裝,最後找到了這個bug,需要把\modules\core\src\opengl_interop.cpp檔案中使用<gl\gl.h>前面添加#include <windows.h>,(其實#include
<gl.h>前都需要添加#include <windows.h>)這樣才能編譯通過,這裡我只重新編譯opencv_core243d.lib 和opencv_highgui243d.lib

已經得到了支援OpenGL的OpenCV lib,接下來就是如何用OpenCV建立OpenGL視窗,基本的調用方式很像OpenCV中滑鼠的使用,都是通過回呼函數實現,核心代碼如下:

// callback functionvoid onDraw(void* param){// Draw something using OpenGL here}int main(void){string openGLWindowName = "OpenGL Test";namedWindow(openGLWindowName, WINDOW_OPENGL);resizeWindow(openGLWindowName, 640, 480);setOpenGlContext(openGLWindowName);setOpenGlDrawCallback(openGLWindowName, onDraw, NULL);updateWindow(openGLWindowName); // when neededreturn 0;}

以前我們調用namedWindow最後一個參數通常會用預設或者使用WINDOW_AUTOSIZE,這回用WINDOW_OPENGL,然後調用setOpenGLContext建立視窗關聯,為了在這個視窗上畫虛擬物體,需要使用回呼函數,建立方法就是setOpenGLDrawCallback,注意這個函數第一個參數是視窗名稱,第二個參數是回呼函數名,第三個參數是回呼函數的參數,因為我這裡回呼函數onDraw是無參函數,所以這裡為NULL。跟MFC重繪需要調用Invalidate或者uadate類似,在需要重繪的時候還要調用updateWindow。

把我做的一個最基礎的OpenGL示範上傳:http://download.csdn.net/detail/yang_xian521/5023063(附上我rebulid的支援OpenGL的lib),如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.