作者bdvstg (bdvstg)
看板C_and_CPP
標題Re: [問題] 用OpenCV與GPU做影像處理
時間Mon Sep 14 12:05:08 2015
我弄了個實驗
圖都是512x512,RGB三色
圖有兩張
一張是隨機產生的雜訊圖,表示高亂度,壓縮比低 (以complex表示)
一張是全黑的圖,表示低亂度,高壓縮比 (以simple表示)
每張圖都分別用jpg(75%品質)、png、raw存檔
6個檔案,每個檔案複製了64個副本
每個檔案都讀這64次來平均讀取時間
simple jpg 4ms
simple png 2ms
simple raw 0.3ms
complex jpg 9.5ms
complex png 9ms
complex raw 0.3ms
後來發現我原本的寫法,raw有事先分配記憶體
對imread有點不公平
就把分配記憶體的加進去
raw的時間變大概接近0.6ms
然後我有測過SSD和HDD
時間差不多,可能檔案太小的緣故吧
底下為程式碼連結
http://codepad.org/AFAPaAbk
專案及測試用檔案
https://goo.gl/sj2d7H
※ 引述《fire0947 (戳戳)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Ubuntu 12.04
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: OpenCV 2.4.10
: 問題(Question):
: 我想要在Linux的作業系統下利用 OpenCV 與 GPU 來做影像處理,
: 對一張512*512圖片做 Hough 轉換,從讀取圖片到完成 Hough 轉換後,
: 希望能夠在10ms內完成。
: 步驟分別大略如下:
: 1.讀取圖片
: imread()
: 2.Canny轉換
: gpu::Canny
: 3.Color轉換
: gpu::Color
: 4.Hough轉換
: gpu::Hough
: 步驟一花費了我大約5ms,二到四大約則為6ms,
: 這樣就無法達成我10ms內完成影像處理的要求了,
: 其中我發現在讀取圖片的code部分,好像只能用CPU來讀取??
: 小弟不才,分別有下列的問題想請教
: Q1.讀取圖片只能用CPU讀取?無法用GPU?
: Q2.現在的顯示卡為NVIDIA GeForce GT 740,若換更好一點顯卡,
: 讓CUDA的核心數增加,步驟二到四的部份,時間能縮短到滿足我的要求嗎?
: Q3.若能縮短不少時間,會購買更高階的顯示卡
: 預算三萬元的情況下,有哪些比較推薦的顯示卡?
: 預算十萬元的情況下,又有哪些比較推薦的顯示卡?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.96.40.71
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1442203511.A.3BB.html
推 LiloHuang: 時間都花在 JPEG decode,換 libjpeg-turbo 應該會變快 09/14 12:29
→ LiloHuang: 至於 SSD 加速端看輸入的圖片有多大,512x512 實在不大 09/14 12:30
→ Feis: 是我誤會了 RAW 的意思~ Orz 09/14 12:32
推 fire0947: 所以讀取raw檔會比其他類型的檔案快,是這意思嗎? 09/16 16:36
→ bdvstg: 一般raw就是指解完的資料 (未經加工的) 09/16 16:53
→ bdvstg: 一般像jpg或是png都是經過壓縮/包裝的檔案 09/16 16:54
→ bdvstg: 解資料(還原資料)需要時間 09/16 16:54
→ bdvstg: 我這邊試的結果 讀512*512*RGB的檔案 時間花費不到1ms 09/16 16:56
推 Bencrie: I/O 那邊 OS 有 cache,沒處理的話測不準吧 09/19 14:02
→ bdvstg: 所以我讀64個不同的檔案這樣也會快取? 09/19 18:47