4-2-2Resize_Linear_gpu.py

000: import cv2
001: import numpy as np
002:
003: def __main():
004: img = createPatten()
005: org = img.copy()
006:
007: gpuImg = cv2.cuda_GpuMat()
008: gpuImg.upload(img)
009:
010: gpuImg = getResize(gpuImg)
011:
012: img = gpuImg.download()
013:
014: cv2.imshow(‘Original’, org)
015: cv2.imshow(‘INTER_LINEAR’, img)
016: cv2.waitKey(0)
017: cv2.destroyAllWindows()
018:
019: def getResize(gpuImg):
020: “””GPUを使用”””
021:
022: basePixSize = 240 # 縦横で大きい辺の変更したいサイズ
023: width, height = gpuImg.size()
024:
025: largeSize = max(height, width) # 大きい方の辺のサイズ
026: resizeRate = basePixSize / largeSize # 変更比率を計算
027:
028: # —ここでサイズ変更—
029: dst = cv2.cuda.resize(gpuImg, (int(width * resizeRate), int(height * resizeRate)), interpolation=cv2.INTER_LINEAR)
030:
031: return dst
032:
033: # サンプル画像を作成
034: def createPatten():
035: square = 1000
036: border = 2
037: size = np.array([square, square, 3])
038: color = np.array([255., 255., 255.])
039: img = np.full(size, color, dtype=np.uint8)
040:
041: # 斜め格子パターンを作成
042: borderColor = (255, 0, 0)
043: for wh in range(0, square, 10):
044: cv2.line(img=img, pt1=(wh, 0), pt2=(0, wh), color=borderColor, thickness=border, lineType=cv2.LINE_AA)
045: for wh in range(0, square, 10):
046: cv2.line(img=img, pt1=(square, wh), pt2=(wh, square), color=borderColor, thickness=border, lineType=cv2.LINE_AA)
047:
048: borderColor = (255, 0, 255)
049: for wh in range(square, 0, -10):
050: cv2.line(img=img, pt1=(wh, 0), pt2=(square, square – wh), color=borderColor, thickness=border, lineType=cv2.LINE_AA)
051:
052: return img
053:
054: if __name__ == ‘__main__’:
055: print(cv2.__version__)
056:
057: __main()