2-3Binary_gpu.py

000: import cv2
001: import numpy as np
002:
003: def __main():
004:
005: img = createImage()
006: cv2.imshow(‘Orignal’, img)
007:
008: timeStart = time.time()
009: # ここで処理を実行する
010: img = getGpuBinary(img)
011: timeEnd = time.time()
012: print(“{0} = {1}”.format(‘GPU’, (timeEnd – timeStart) * 1000) + “/ms”)
013:
014: cv2.imshow(‘Final result’, img)
015: cv2.waitKey(0)
016:
017: cv2.destroyAllWindows()
018:
019: def getGpuBinary(src):
020: “””GPUを使用”””
021: global gpuImg
022: global gpuGray
023: global gpuDst
024:
025: gpuImg.upload(src) # GPUで編集できるようにイメージをアップロード
026:
027: gpuGray = cv2.cuda.cvtColor(gpuImg, cv2.COLOR_BGR2GRAY) # GPUを使用してグレースケールに変換する
028: # 閾値(thresh)以下の値は0に,それ以外はmaxValで指定した値になる
029: ret, gpuDst = cv2.cuda.threshold(gpuGray, thresh=128, maxval=255, type=cv2.THRESH_BINARY) # GPUを使用してグレースケールを二値化する
030:
031: dst = gpuDst.download() # 元のMatデータに戻す //cuda_Matでは表示できない
032:
033: return dst
034:
035:
036: def createImage():
037:
038: width = 600
039: height = 480
040:
041: size = (height, width, 3) # 縦480ピクセル 横640ピクセル 3チャンネル
042: img = np.zeros(size, dtype=np.uint8)
043: rete = 255 / width
044: for h in range(0, height):
045: for w in range(0, width):
046: data = int(w * rete)
047: img[h, w] = [data, data, data]
048:
049: red = np.array([0., 0., 255.])
050: green = np.array([0., 255., 0.])
051: blue = np.array([255., 0., 0.])
052:
053: cyan = np.array([255., 255., 0.])
054: magenta = np.array([255., 0., 255])
055: yellow = np.array([0., 255., 255.])
056:
057: cv2.rectangle(img=img, pt1=(0, 0), pt2=(200, 200), color=red, thickness=-1)
058: cv2.rectangle(img=img, pt1=(200, 0), pt2=(400, 200), color=green, thickness=-1)
059: cv2.rectangle(img=img, pt1=(400, 0), pt2=(600, 200), color=blue, thickness=-1)
060:
061: cv2.rectangle(img=img, pt1=(0, 200), pt2=(200, 400), color=cyan, thickness=-1)
062: cv2.rectangle(img=img, pt1=(200, 200), pt2=(400, 400), color=magenta, thickness=-1)
063: cv2.rectangle(img=img, pt1=(400, 200), pt2=(600, 400), color=yellow, thickness=-1)
064:
065: return img
066:
067: if __name__ == ‘__main__’:
068: print(cv2.__version__)
069:
070: gpuImg = cv2.cuda_GpuMat() # GPUで画像を使用する準備
071: gpuGray = cv2.cuda_GpuMat()
072: gpuDst = cv2.cuda_GpuMat()
073: __main()