12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #!/usr/bin/env python
- import os
- import cv2 as cv
- import numpy as np
- from tests_common import NewOpenCVTests, unittest
- def create_affine_transform_matrix(size,angle):
- return np.array([[np.cos(angle), -np.sin(angle), size[1]/2], [np.sin(angle), np.cos(angle), 0]])
- def create_perspective_transform_matrix(size,angle):
- return np.vstack([create_affine_transform_matrix(size,angle),[0, 0, 1]])
- class cudawarping_test(NewOpenCVTests):
- def setUp(self):
- super(cudawarping_test, self).setUp()
- if not cv.cuda.getCudaEnabledDeviceCount():
- self.skipTest("No CUDA-capable device is detected")
- def test_resize(self):
- dstSz = (256,256)
- interp = cv.INTER_NEAREST
- npMat = (np.random.random((128,128,3))*255).astype(np.uint8)
- cuMat = cv.cuda_GpuMat(npMat)
- cuMatDst = cv.cuda_GpuMat(dstSz,cuMat.type())
- self.assertTrue(np.allclose(cv.cuda.resize(cuMat,dstSz,interpolation=interp).download(),
- cv.resize(npMat,dstSz,interpolation=interp)))
- cv.cuda.resize(cuMat,dstSz,cuMatDst,interpolation=interp)
- self.assertTrue(np.allclose(cuMatDst.download(),cv.resize(npMat,dstSz,interpolation=interp)))
- def test_warp(self):
- npMat = (np.random.random((128,128,3))*255).astype(np.uint8)
- size = npMat.shape[:2]
- M1 = create_affine_transform_matrix(size,np.pi/2)
- cuMat = cv.cuda_GpuMat(npMat)
- cuMatDst = cv.cuda_GpuMat(size,cuMat.type())
- borderType = cv.BORDER_REFLECT101
- self.assertTrue(np.allclose(cv.cuda.warpAffine(cuMat,M1,size,borderMode=borderType).download(),
- cv.warpAffine(npMat,M1,size, borderMode=borderType)))
- cv.cuda.warpAffine(cuMat,M1,size,cuMatDst,borderMode=borderType)
- self.assertTrue(np.allclose(cuMatDst.download(),cv.warpAffine(npMat,M1,size,borderMode=borderType)))
- interpolation = cv.INTER_NEAREST
- flags = interpolation | cv.WARP_INVERSE_MAP
- dst_gold = cv.warpAffine(npMat, M1, size, flags = flags)
- cuMaps = cv.cuda.buildWarpAffineMaps(M1,True,size)
- dst = cv.remap(npMat, cuMaps[0].download(), cuMaps[1].download(),interpolation)
- self.assertTrue(np.allclose(dst,dst_gold))
- xmap = cv.cuda_GpuMat(size,cv.CV_32FC1)
- ymap = cv.cuda_GpuMat(size,cv.CV_32FC1)
- cv.cuda.buildWarpAffineMaps(M1,True,size,xmap,ymap)
- dst = cv.remap(npMat, xmap.download(), ymap.download(),interpolation)
- self.assertTrue(np.allclose(dst,dst_gold))
- M2 = create_perspective_transform_matrix(size,np.pi/2)
- np.allclose(cv.cuda.warpPerspective(cuMat,M2,size,borderMode=borderType).download(),
- cv.warpPerspective(npMat,M2,size,borderMode=borderType))
- cv.cuda.warpPerspective(cuMat,M2,size,cuMatDst,borderMode=borderType)
- self.assertTrue(np.allclose(cuMatDst.download(),cv.warpPerspective(npMat,M2,size,borderMode=borderType)))
- dst_gold = cv.warpPerspective(npMat, M2, size, flags = flags)
- cuMaps = cv.cuda.buildWarpPerspectiveMaps(M2,True,size)
- dst = cv.remap(npMat, cuMaps[0].download(), cuMaps[1].download(),interpolation)
- self.assertTrue(np.allclose(dst,dst_gold))
- cv.cuda.buildWarpPerspectiveMaps(M2,True,size,xmap,ymap)
- dst = cv.remap(npMat, xmap.download(), ymap.download(),interpolation)
- self.assertTrue(np.allclose(dst,dst_gold))
- if __name__ == '__main__':
- NewOpenCVTests.bootstrap()
|