OpenCV 為啥勾搭上 OpenGL?

2021-09-30 13:00:17 字數 1990 閱讀 7527

· 7 個月前    

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

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

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

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

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

void ogl::render(const texture2d& tex, rect_wndrect=rect_(0.0, 0.0, 1.0, 1.0), rect_texrect=rect_(0.0, 0.0, 1.0, 1.0))

it depends.

如果你開發的是命令列程式並不顯示任何影象,或者顯示的很簡單,那麼不需要轉換到 cv::ogl 下。

如果你的應用耗費了大量時間在的顯示上,或是希望擁有高質量的介面系統,那麼你可以借助 cv::ogl::texture2d 加速影象的渲染。

如果你開發的是增強現實應用,你肯定已經擁有了自己的三維渲染模組,可以考慮與 cv::ogl::buffer 整合。

如果你已經在使用 cuda 模組,對於渲染的時候資料需要回傳到 cpu 表示多此一舉,那麼你可以使用 cuda 與 opengl 的協同功能去除多餘的資料傳輸。

另一方面,如果你不是 opencv 的使用者但是你正在開發虛擬實境應用,你可以考慮將視覺計算引入到你的系統中,實現類似 hololens 的裝置。

由於顯示卡能力的增強以及硬體公司的支援,opencv 逐漸展露出新的形態,大量的視覺計算位於顯示卡上。

這意味著除了檔案讀寫(highgui 模組)外,視覺應用可以逐漸脫離 cpu。

舉報

市售體感裝置橫評:微軟、intel、蘋果、leapmotion 哪家強!

nvidia 招聘智慧型汽車 computer vision 工程師

「舍友勾搭上我爸還懷孕了!

我的大學舍友勾搭上我爸爸,現在懷孕就要生了!爸爸,你怎麼能這樣對待我和媽媽?情人節前一晚,廣州某大學珠海校區的一名大三女生在網路上發帖,血淚控訴 大學舍友和自己的父親的 婚外戀 該女生在網帖中稱 自己家境較好,父親是在老家開廠的 土豪 大一時父親認識了她的舍友,兩人進而發生婚外情,之後父親逼著母親離...

「舍友勾搭上我爸還懷孕了!

我的大學舍友勾搭上我爸爸,現在懷孕就要生了!爸爸,你怎麼能這樣對待我和媽媽?情人節前一晚,廣州某大學珠海校區的一名大三女生在網路上發帖,血淚控訴 大學舍友和自己的父親的 婚外戀 該女生在網帖中稱 自己家境較好,父親是在老家開廠的 土豪 大一時父親認識了她的舍友,兩人進而發生婚外情,之後父親逼著母親離...

為啥不用ActiveRecord

首先,ar的改進之一是用特性來替換對映檔案。稱這樣能減少 提高開發效率,但是用 nhibernte 大部分人也不會手寫 而是通過工具生成,這樣這點其實優勢不大。不可否認這樣做在修改時更方便,不用修改兩個檔案 dry 但是缺點也很明顯,特性不可能完全對映配置檔案,否則特性會把類弄的很亂,這也使 ar只...