6-3Sobel_gpu.py

000: import cv2
001:
002: def __main():
003: gpuImg = cv2.cuda_GpuMat()
004: img = cv2.imread(‘../IMG_0260.JPG’)
005:
006: gpuImg.upload(img)
007: gpuImg = getGpuResize(gpuImg)
008:
009: timeStart = time.time()
010:
011: # C1画像にしないとエラーになる
012: gpuImg = cv2.cuda.cvtColor(gpuImg, cv2.COLOR_BGR2GRAY)
013: # ここで処理を実行する
014: filter = cv2.cuda.createSobelFilter(srcType=cv2.CV_8UC1,dstType=cv2.CV_32F, dx=1, dy=0, ksize=3)
015: gpuDst = cv2.cuda_Filter.apply(filter, gpuImg)
016:
017: dst = gpuDst.download()
018: dst = cv2.convertScaleAbs(src=dst) # 8ビット符号なし整数に変換
019:
020: cv2.imshow(‘Final result(GPU)’, dst)
021: cv2.waitKey(0)
022:
023: cv2.destroyAllWindows()
024:
025: def getGpuResize(gpuImg):
026: “””GPUを使用”””
027: basePixSize = 1280 # 縦横で大きい辺の変更したいサイズ
028: width, height = gpuImg.size()
029:
030: largeSize = max(height, width) # 大きい方の辺のサイズ
031: resizeRate = basePixSize / largeSize # 変更比率を計算
032:
033: gpuImg = cv2.cuda.resize(gpuImg, (int(width * resizeRate), int(height * resizeRate)))
034:
035: return gpuImg
036:
037: if __name__ == ‘__main__’:
038: print(cv2.__version__)
039:
040: __main()