注:在使用gpu模組之前,需要確認在使用cmake編譯opencv時,勾選了選項with_cuda和with_tbb使其生效生效。
若以上配置已經完成,在使用gpu模組的函式之前,還做一下檢查:呼叫函式gpu::getcudaenableddevicecount,如果你在使用的opencv模組編譯時不支援gpu,這個函式返回值為0;否則返回值為已安裝的cuda裝置的數量。
opencv的gpu模組只支援nvidia的顯示卡,原因是該部分是基於nvidia的cuda和nvidia的npp模組實現的。而該模組的好處在於使用gpu模組無需安裝cuda工具,也無需學習gpu程式設計,因為不需要編寫gpu相關的**。但如果你想重新編譯opencv的gpu模組的話,還是需要cuda的toolkit。
由於gpu模組的發展,使大部分函式使用起來和之前在cpu下開發非常類似。首先,就是把gpu模組鏈結到你的工程中,幷包含必要的標頭檔案gpu.hpp。其次,就是gpu模組下的資料結構,原本在cv名字空間中的現在都在gpu名字空間中,使用時可以gpu::和cv::來防止混淆。
在gpu模組中,矩陣的型別為:gpumat而不是opencv中使用的cv::mat,其他的函式命名和cpu模組中相同。opencv中gpu模組函式的使用步驟如下:
1
.驗證opencv是否已啟用gpu模組。2.
上傳待處理資料到gpu
(mat
--> gpumat)。3.
呼叫opencv支援的gpu的處理函式。4.
(gpumat--
-> mat)。
根據 所提到的,乙個問題是對於2.0的gpu模組,多通道的函式支援的並不好,推薦使用gpu模組處理灰度的影象。有些情況下,使用gpu模組的執行速度還不及cpu模組下的效能,所以可以認為,gpu模組相對而言還不夠成熟,需要進一步優化。很重要的乙個原因就是記憶體管理部分和資料轉換部分對於gpu模組而言消耗了大量的時間。
一段自帶的示例**如下,實現求矩陣轉置的功能:
#include
#include "cvconfig.h"
#include "opencv2/core/core.hpp"
#include "opencv2/gpu/gpu.hpp"
using
namespace
std;
using
namespace cv;
using
namespace cv::gpu;
struct worker ;
int main()
for (int i = 0; i < num_devices; ++i)
}// execute calculation in two threads using two gpus
int devices = ;
parallel_do(devices, devices + 2, worker());
return0;}
void worker::operator()(int device_id) const
cuda的基本使用方法:
參考原文:
python 學習筆記(二十一)
coding utf8 author liwei windows平台多程序匯入multiprocessing模組 from multiprocessing import process,queue from multiprocessing import pool import os,time,ran...
筆記(二十一) 安全
威脅 定義對應安全屬性 spoofing 偽裝 冒充他人身份 認證tampering 篡改 修改資料或 完整性repudiation 抵賴 否認做過的事情 不可抵賴性 information disclosure 資訊洩露 機密資訊洩露 機密性denial of service 拒絕服務 拒絕服務 ...
c語言學習筆記二十一
makefile中關於變數的語法規則 示例 如下 foo bar bar huh?all echo foo 執行make後輸出 huh?優點 可以把變數的值推遲到後面定義 示例 main.o main.c cc cfags cppflags c cc gcc 編譯選項 cfags o g 預處理選項...