openCV和openGL到底是什麼?

2021-10-05 21:55:46 字數 1460 閱讀 7624

opencv的全稱是open source computer vision視覺 library,是乙個跨平台的計算機視覺庫(主要操作物件是影象)。opencv是由英特爾公司發起並參與開發,以bsd許可證授權發行,可以在商業和研究領域中免費使用。opencv可用於開發實時的影象處理、計算機視覺以及模式識別程式。該程式庫也可以使用英特爾公司的ipp進行加速處理。

opengl(全寫open graphics library)是個定義了乙個跨程式語言、跨平台的應用程式介面(api)的規格,它用於生成二維、三維影象。這個介面由近三百五十個不同的函式呼叫組成,用來從簡單的圖形位元繪製複雜的三維景象。而另一種程式介面系統是僅用於microsoft windows上的direct3d。opengl常用於cad、虛擬實境、科學視覺化程式和電子遊戲開發  。

兩者的區別就是computer visioncomputer graphics這兩個學科之間的區別,前者專注於從採集到的視覺影象中獲取資訊,是用機器來理解影象;後者是用機器繪製合適的視覺影象給人看。

問題一:為何引入 opengl?

以前opencv 的渲染部分都是由 cpu 來實現的,不論是畫線還是把顯示到螢幕上。這有兩個問題,速度慢,同時沒法畫三維物體。引入 opengl 是為了借助 顯示卡的力量,顯示卡比 cpu 更擅長渲染,同時顯示卡和 cpu 可以同時幹活。比方說,cpu 在獲取攝像頭畫面然後檢測人臉時,顯示卡在渲染三維的人臉網格模型和高精度抗鋸齒的二維介面。

另外,隨著民用深度感測器的普及,cv::videocapture 第一時間增加了對 kinect、華碩 xtion、intel perceptual computing sdk 等的支援。傳統的視覺計算中,深度圖只能當做單通道的灰度圖進行處理。想實現隔空的多點觸控是綽綽有餘,但是如果想實現三維重建(比如 kinect fushion)那麼我們必須將演算法公升級到三維空間。相應的,三維空間的演算法也需要三維的 api 進行渲染,也就是 opengl。

想開啟該功能,需要在配置 cmake 時選上 with_opengl=on,然後重新編譯完整的 opencv 庫。我簡要介紹下幾個元件:

ogl::buffer 是 opengl 中的快取區,可以用於儲存多邊形的頂點和顏色等。

ogl::texture2d 是儲存在顯示卡中的二維貼圖,可以認為是得到 gpu 加速的 cv::mat。

前面這兩個類都只是儲存資料,要把資料畫出來,還要用到 ogl::render 函式。

oid ogl::render(const texture2d& tex, rect_《double》 wndrect=rect_《double》(0.0, 0.0, 1.0, 1.0), rect_《double》 texrect=rect_《double》(0.0, 0.0, 1.0, 1.0))

OpenCV 為啥勾搭上 OpenGL?

7 個月前 如果讀者留意 opencv 2.3 之後的版本,那麼會發現 cv ogl namespace,ogl 自然是 opengl了。乙個三維計算機圖形庫為何出現在計算機視覺中,傳統的 cv 開發者是否需要學習它,這些問題待我一一來回答。在 2.3 之前 opencv 的渲染部分都是由 cpu ...

OpenCV 與 OpenGL 的關係是什麼?

完整版本回答參見專欄文章 opencv 為啥勾搭上 opengl?黑客與畫家 知乎專欄 乙個是最廣泛使用開源的計算機視覺庫 乙個是三維工業標準 兩者本毫無關係 不過自2.3開始,opencv的highgui模組開始支援opengl渲染 另外增強現實 ar 應用中,既可能用到opencv,也可能用到o...

OpenGL學習筆記 OpenGL的變換和矩陣

opengl的變換和矩陣 1 指定矩陣型別 opengl中使用glmatrixmode指定當前要設定的矩陣型別,常用的引數是gl projection和gl modelview,還有gl texture。opengl將視點變換 即攝像機變換 和模型變換 即物體變換和世界變換 合二為一了。glmatr...