OpenCV T-API的測試(一)

OpenCL運行測試


由于雙目的分辨率會非常大计雌,因此特來測試下OpenCL的運算性能(奈何手中無英偉達)
環(huán)境:MacOS x86_64 Darwin 17.7.0
CPU:Intel Core i5-5350U
GPU:Intel HD Graphics 6000
OpenCV:OpenCV 4.2
編譯器:clang++

以下是選用一張4480x6720和一張640x480圖像做測試的結果郎汪,原始數(shù)據(jù)輸出:

測試結果(僅供參考


  1. 像素:4480x6720,循環(huán)次數(shù):100次
    Size:4480x6720
    OpenCL time consume = 85.6954ms
    Size:4480x6720
    CPU time consume = 120.533ms
    Size:4480 x 6720
    OpenCL loops time consume = 1050.15 ms
    Size:4480x6720
    CPU loop time consume = 1058.4ms
    -------------Process Complete------------

  2. 像素:4480x6720移袍,循環(huán)次數(shù):100次
    Size:4480x6720
    OpenCL time consume = 86.6929 ms
    Size:4480x6720
    CPU time consume = 118.128 ms
    Size:4480 x 6720
    OpenCL loops time consume = 1055.27 ms
    Size:4480x6720
    CPU loops time consume = 1065.48 ms
    -------------Process Complete------------

  3. 像素4480x6720,循環(huán)次數(shù):1000
    Size:4480x6720
    OpenCL time consume = 86.6043 ms
    Size:4480x6720
    CPU time consume = 119.366 ms
    Size:4480 x 6720
    OpenCL loops time consume = 97815.7 ms
    Size:4480x6720
    CPU loops time consume = 105973 ms
    -------------Process Complete------------

  4. 像素:640x480钳榨,循環(huán)次數(shù):100次
    Size:640x480
    OpenCL time consume = 3.01333 ms
    Size:640x480
    CPU time consume = 1.55183 ms
    Size:640 x 480
    OpenCL loops time consume = 109.044 ms
    Size:640x480
    CPU loops time consume = 84.6049 ms
    -------------Process Complete------------

  5. 像素:640x480,循環(huán)次數(shù):100次
    Size:640x480
    OpenCL time consume = 3.2602 ms
    Size:640x480
    CPU time consume = 1.29072 ms
    Size:640 x 480
    OpenCL loops time consume = 107.968 ms
    Size:640x480
    CPU loops time consume = 86.4707 ms
    -------------Process Complete------------

  6. 像素:640x480州藕,1000次
    Size:640x480
    OpenCL time consume = 3.23095 ms
    Size:640x480
    CPU time consume = 1.17594 ms
    Size:640 x 480
    OpenCL loops time consume = 1164.68 ms
    Size:640x480
    CPU loops time consume = 940.939 ms
    -------------Process Complete------------

  7. 像素:640x480,10000次
    Size:640x480
    OpenCL time consume = 3.64011 ms
    Size:640x480
    CPU time consume = 1.2437 ms
    Size:640 x 480
    OpenCL loops time consume = 10745.1 ms
    Size:640x480
    CPU loops time consume = 8566.75 ms
    -------------Process Complete------------

表格總結

表1:

分辨率 CPU處理1次 OpenCL處理1次 CPU循環(huán)100次 OpenCL循環(huán)100次
640x480 1.55 ms 3.01 ms 84.60 ms 109.04 ms
640x480 1.29 ms 3.26 ms 86.47 ms 107.96 ms
4480x6720 120.53 ms 85.69 ms 1058.4 ms 1050.15 ms
4480x6720 118.12 ms 86.69 ms 1065.48 ms 1055.27 ms

表2:

分辨率 循環(huán)次數(shù) CPU處理1次 OpenCL處理1次 CPU循環(huán) OpenCL循環(huán)
640x480 100次 1.55 ms 3.01 ms 84.60 ms 109.04 ms
640x480 100次 1.29 ms 3.26 ms 86.47 ms 107.96 ms
640x480 1000次 1.17 ms 3.23 ms 940.93 ms 1164.68 ms
640x480 10000次 1.24 ms 3.64 ms 8566.75 ms 10745.10 ms
4480x6720 100次 120.53 ms 85.69 ms 1058.4 ms 1050.15 ms
4480x6720 100次 118.12 ms 86.69 ms 1065.48 ms 1055.27 ms
4480x6720 1000次 119.36 ms 86.60 ms 1059.73 s 978.15 s

圖表分析


為此我專門做了如下圖表:

處理一張圖

循環(huán)處理

因為這個數(shù)據(jù)差距有些大酝陈,不好直觀看出差距床玻,那么我們不妨采用log10為底的坐標刻度:

對數(shù)1

對數(shù)2

初步分析

  1. 在分辨率較小的情況下,使用CPU處理會快于GPU(OpenCL),分辨率較大則GPU占優(yōu)如圖表中顯示沉帮。
  2. 在分辨率大(>1080P)而且循環(huán)次數(shù)多(>1000)的情況下锈死,使用GPU(OpenCL)明顯會快出CPU,參見表2最后一組數(shù)據(jù),1000次循環(huán)整整快出了81.58s穆壕。
    當然待牵,由于平臺不同,這個結論不一定具有普適性

結尾放上測試代碼喇勋,簡單的canny邊緣檢測

edge_test.cpp

#include <opencv2/opencv.hpp>
using namespace cv;
void opencl_process(std::string &filename); //處理一張圖(OpenCL)
void cpu_process(std::string &filename);  //處理一張圖(CPU)
void loops_opencl(std::string &filename,int &times); //循環(huán)處理(OpenCL)
void loops_cpu(std::string &filename,int &times); //循環(huán)處理(CPU)
int main(int argc, char** argv)
{
    std::string filename = 文件名;
    int times = 循環(huán)次數(shù);
    opencl_process(filename);
    cpu_process(filename);
    loops_opencl(filename,times);
    loops_cpu(filename,times);
    std::cout <<"-------------Process Complete------------"<<std::endl;
    return 0;
}

void opencl_process(std::string &filename){
    double start = (double)getTickCount();
    UMat img, gray;
    // 復制缨该,從Mat->UMat
    imread(filename, IMREAD_COLOR).copyTo(img);
    cvtColor(img, gray, COLOR_BGR2GRAY);
    GaussianBlur(gray, gray,Size(7, 7), 1.5);
    Canny(gray, gray, 0, 50);
    double time_consume = ((double)getTickCount() - start) / getTickFrequency();
    std::cout << "Size:" << gray.cols << "x" << gray.rows << std::endl;
    std::cout << "OpenCL time consume = " << time_consume * 100<< " ms" << std::endl;
}

void cpu_process(std::string &filename){
    double start = (double)getTickCount();
    Mat img, gray;
    imread(filename, IMREAD_COLOR).copyTo(img);
    cvtColor(img, gray, COLOR_BGR2GRAY);
    GaussianBlur(gray, gray,Size(7, 7), 1.5);
    Canny(gray, gray, 0, 50);
    double time_consume = ((double)getTickCount() - start) / getTickFrequency();
    std::cout << "Size:" << gray.cols << "x" << gray.rows << std::endl;
    std::cout << "CPU time consume = " << time_consume * 100<< " ms" << std::endl;
}

void loops_opencl(std::string &filename,int &times){
    double start = (double)getTickCount();
    UMat img, gray;
    for(int i=0;i<=times;i++){
        imread(filename, IMREAD_COLOR).copyTo(img);
        cvtColor(img, gray, COLOR_BGR2GRAY);
        GaussianBlur(gray, gray,Size(7, 7), 1.5);
        Canny(gray, gray, 0, 50);
    }
    double time_consume = ((double)getTickCount() - start) / getTickFrequency();
    std::cout << "Size:" << gray.cols << " x " << gray.rows << std::endl;
    std::cout << "OpenCL loops time consume = " << time_consume * 100<< " ms" << std::endl;

}

void loops_cpu(std::string &filename,int &times){
    double start = (double)getTickCount();
    Mat img, gray;
    for (int i =0; i < times; i++){
        imread(filename, IMREAD_COLOR).copyTo(img);
        cvtColor(img, gray, COLOR_BGR2GRAY);
        GaussianBlur(gray, gray,Size(7, 7), 1.5);
        Canny(gray, gray, 0, 50);
    }
    double time_consume = ((double)getTickCount() - start) / getTickFrequency();
    std::cout << "Size:" << gray.cols << "x" << gray.rows << std::endl;
    std::cout << "CPU loops time consume = " << time_consume * 100<< " ms" << std::endl;
}

更改文件名和循環(huán)次數(shù)即可。
編譯命令參考:

clang++ -std=c++11 edge_test.cpp -o edge_test `pkg-config --cflags --libs opencv4`

注意:opencv 4茄蚯,開啟c++11編譯選項压彭。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渗常,隨后出現(xiàn)的幾起案子壮不,更是在濱河造成了極大的恐慌,老刑警劉巖皱碘,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件询一,死亡現(xiàn)場離奇詭異,居然都是意外死亡癌椿,警方通過查閱死者的電腦和手機健蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踢俄,“玉大人缩功,你說我怎么就攤上這事《及欤” “怎么了嫡锌?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琳钉。 經常有香客問我势木,道長,這世上最難降的妖魔是什么歌懒? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任啦桌,我火速辦了婚禮,結果婚禮上及皂,老公的妹妹穿的比我還像新娘甫男。我一直安慰自己且改,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布板驳。 她就那樣靜靜地躺著钾虐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笋庄。 梳的紋絲不亂的頭發(fā)上效扫,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音直砂,去河邊找鬼菌仁。 笑死,一個胖子當著我的面吹牛静暂,可吹牛的內容都是我干的济丘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洽蛀,長吁一口氣:“原來是場噩夢啊……” “哼摹迷!你這毒婦竟也來了?” 一聲冷哼從身側響起郊供,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤峡碉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驮审,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲫寄,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年疯淫,在試婚紗的時候發(fā)現(xiàn)自己被綠了地来。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熙掺,死狀恐怖未斑,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情币绩,我是刑警寧澤蜡秽,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站类浪,受9級特大地震影響载城,放射性物質發(fā)生泄漏肌似。R本人自食惡果不足惜费就,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望川队。 院中可真熱鬧力细,春花似錦睬澡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逝慧,卻和暖如春昔脯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笛臣。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工云稚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沈堡。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓静陈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诞丽。 傳聞我的和親對象是個殘疾皇子鲸拥,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354