OpenCV使用CUDA處理圖像的教程與實(shí)戰(zhàn)
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
import?cv2?as?cv
gpu_frame?=?cv.cuda_GpuMat()
screenshot?=?cv.imread('media/drip.png')
gpu_frame.upload(screenshot)
gpu_frame.download()

在單張圖像上使用
在多張圖像上使用
對(duì)多張圖像使用Dask進(jìn)行并行延時(shí)處理
第1步:上傳
import?cv2?as?cv
gpu_frame?=?cv.cuda_GpuMat()
screenshot?=?cv.imread('media/drop.png')
gpu_frame.upload(screenshot)
第2步:處理圖像
screenshot?=?cv.cuda.cvtColor(gpu_frame,?cv.COLOR_RGB2BGR)
screenshot?=?cv.cuda.resize(screenshot,?(400,?400))
第3步:下載
screenshot.download()

import?cv2?as?cv
img_files?=?['bear.png',?'drip.png',?'tldr.png',?'frog.png']
#?創(chuàng)建幀來保存圖片(cv2.cuda_GpuMat)
gpu_frame?=?cv.cuda_GpuMat()
for?i?in?range(len(img_files)):
????#?加載圖像(CPU)
????screenshot?=?cv.imread(f"media/{img_files[i]}")
????#?上傳到GPU
????gpu_frame.upload(screenshot)
????
????#?轉(zhuǎn)換顏色到opencv?(numpy)?ndarray→cv2.cuda_GpuMat
????screenshot?=?cv.cuda.cvtColor(gpu_frame,?cv.COLOR_RGB2BGR)
????
????#?反向閾值@?100
????screenshot?=?cv.cuda.threshold(screenshot,?105,?255,?cv.THRESH_BINARY_INV)
????????
????#?調(diào)整圖像
????screenshot?=?cv.cuda.resize(screenshot[1],?(200,?200))
????#?從GPU下載圖像(cv2)?cuda_GpuMat→numpy.ndarray
????screenshot?=?screenshot.download()

import?cv2?as?cv
import?dask.delayed
@dask.delayed
def?preprocess(files):
????#?復(fù)制圖像文件
????i_files?=?files.copy()
????
????#?創(chuàng)建GPU幀來保存圖像
????gpu_frame?=?cv.cuda_GpuMat()
????
????for?i?in?range(len(i_files)):
????????#?加載圖像(CPU)
????????screenshot?=?cv.imread(f'media/{i_files[i]}')
????????#?上傳到GPU
????????gpu_frame.upload(screenshot)
????????#?轉(zhuǎn)換顏色到opencv?(numpy)?ndarray→cv2.cuda_GpuMat
????????screenshot?=?cv.cuda.cvtColor(gpu_frame,?cv.COLOR_RGB2BGR)
????????screenshot?=?cv.cuda.cvtColor(screenshot,?cv.COLOR_BGR2GRAY)
????????#?反向閾值@?100
????????screenshot?=?cv.cuda.threshold(screenshot,?125,?255,?cv.THRESH_BINARY)
????????#?調(diào)整圖像
????????screenshot?=?cv.cuda.resize(screenshot[1],?(200,?200))
????????
????????#?從GPU下載圖像?(cv2.cuda_GpuMat?->?numpy.ndarray)
????????screenshot?=?screenshot.download()
????????#?用新圖像
????????i_files[i]?=?screenshot
????
????#?輸出預(yù)處理圖像
????return?i_files
from?dask?import?compute
img_files?=?['bear.png',?'drip.png',?'tldr.png',?'frog.png']
img_files_2?=?['apple.png',?'eye.png',?'window.png',?'blinds.png']
#?設(shè)置延遲
set_a?=?dask.delayed(preprocess)(img_files)
set_b?=?dask.delayed(preprocess)(img_files_2)
#?開始計(jì)算
out_a,?out_b?=?compute(*[set_a,?set_b])

進(jìn)階閱讀:
https://medium.com/dropout-analytics/opencv-cuda-for-videos-f3dcf346e398 https://medium.com/dropout-analytics/pycuda-on-jetson-nano-7990decab299 https://medium.com/dropout-analytics/beginners-guide-to-knn-with-cuml-ddca099f9e9d
參考引用
Koriukina, Valeriia. “Getting Started with OpenCV CUDA Module.” Learn OpenCV, Learnopencv.com, 15 Sept. 2020, learnopencv.com/getting-started-opencv-cuda-modul. McWhorter, Paul. “AI on the Jetson Nano LESSON 10: Installing OpenCV for Python 3.” Paul McWhorter — YouTube, Youtube.com/User/Mcwhorpj, 2 Nov. 2019, youtu.be/3QYayL5y2hk. Pulli, Kari; Baksheev, Anatoly; Kornyakov, Kirill; Eruhimov, Victor. “Realtime Computer Vision with OpenCV.” Realtime Computer Vision with OpenCV — ACM Queue, Association for Computing Machinery, 22 Apr. 2012, queue.acm.org/detail.cfm?id=2206309.
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
評(píng)論
圖片
表情

