(含源码)利用NVIDIA VPI之透视变换
(含源碼)利用NVIDIA VPI之透視變換
更多精彩內(nèi)容:
 https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561
 
文章目錄
- (含源碼)利用NVIDIA VPI之透視變換
NVIDIA 視覺編程接口 (VPI: Vision Programming Interface) 是 NVIDIA 的計(jì)算機(jī)視覺和圖像處理軟件庫,使您能夠?qū)崿F(xiàn)在 NVIDIA Jetson 嵌入式設(shè)備和獨(dú)立的GPU 上可用的不同硬件后端上加速的算法。
庫中的一些算法包括過濾方法、透視扭曲、時(shí)間降噪、直方圖均衡、立體視差和鏡頭失真校正。 VPI 提供易于使用的 Python 綁定以及 C++ API。
除了與 OpenCV 接口外,VPI 還能夠與 PyTorch 和其他基于 Python 的庫進(jìn)行互操作。 在這篇文章中,我們將通過基于 PyTorch 的目標(biāo)檢測(cè)和跟蹤示例向您展示這種互操作性如何工作。 有關(guān)詳細(xì)信息,請(qǐng)參閱視覺編程接口 (VPI) 頁面和視覺編程接口文檔。
下面的示例獲取輸入視頻并輸出視頻,其中對(duì)每一幀應(yīng)用不同的透視扭曲。 結(jié)果是透視彈跳效果。 可以修改示例應(yīng)用程序以從相機(jī)獲取輸入并實(shí)時(shí)應(yīng)用效果。
import cv2import sysimport vpiimport numpy as npfrom math import sin, cos, pifrom argparse import ArgumentParser# ----------------------------# Parse command line argumentsparser = ArgumentParser()parser.add_argument('backend', choices=['cpu', 'cuda','vic'],help='Backend to be used for processing')parser.add_argument('input',help='Input video to be denoised')args = parser.parse_args();if args.backend == 'cuda':backend = vpi.Backend.CUDAelif args.backend == 'cpu':backend = vpi.Backend.CPUelse:assert args.backend == 'vic'backend = vpi.Backend.VIC# -----------------------------# Open input and output videosinVideo = cv2.VideoCapture(args.input)fourcc = cv2.VideoWriter_fourcc(*'MPEG')inSize = (int(inVideo.get(cv2.CAP_PROP_FRAME_WIDTH)), int(inVideo.get(cv2.CAP_PROP_FRAME_HEIGHT)))fps = inVideo.get(cv2.CAP_PROP_FPS)outVideo = cv2.VideoWriter('perspwarp_python'+str(sys.version_info[0])+'_'+args.backend+'.mp4',fourcc, fps, inSize)#--------------------------------------------------------------# Main processing loopcurFrame = 1while True:print("Frame: {}".format(curFrame))curFrame+=1# Read one input frameret, cvFrame = inVideo.read()if not ret:break# Convert it to NV12_ER format to be used by VPIwith vpi.Backend.CUDA:frame = vpi.asimage(cvFrame).convert(vpi.Format.NV12_ER)# Calculate the transformation to be applied ------------# Move image's center to origin of coordinate systemT1 = np.array([[1, 0, -frame.width/2.0],[0, 1, -frame.height/2.0],[0, 0, 1]])# Apply some time-dependent perspective transformv1 = sin(curFrame/30.0*2*pi/2)*0.0005v2 = cos(curFrame/30.0*2*pi/3)*0.0005P = np.array([[0.66, 0, 0],[0, 0.66, 0],[v1, v2, 1]])# Move image's center back to where it wasT2 = np.array([[1, 0, frame.width/2.0],[0, 1, frame.height/2.0],[0, 0, 1]])# Do perspective warp using the backend passed in the command line.with backend:frame = frame.perspwarp(np.matmul(T2, np.matmul(P, T1)))# Convert it to RGB8 for output using the CUDA backendwith vpi.Backend.CUDA:frame = frame.convert(vpi.Format.RGB8)# Write the denoised frame to the output videowith frame.rlock_cpu() as data:outVideo.write(data)原視頻:
處理結(jié)果:
更多精彩內(nèi)容:
 https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561
總結(jié)
以上是生活随笔為你收集整理的(含源码)利用NVIDIA VPI之透视变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: JavaScript_shoping++
- 下一篇: 技术图文:数字资产量化中的三角套利策略
