17cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# Calculates comparison output values for DistortionMapperTest.cpp:CompareToOpenCV
27cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala#
37cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# Assumes a python that has numpy and cv2 (OpenCV) available
47cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
57cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvalaimport numpy as np
67cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvalaimport cv2
77cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
87cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaFx = 1000
97cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaFy = 1000
107cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaCx = 500
117cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaCy = 500
127cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# s = 0 - not supported by OpenCV
137cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
147cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaK = np.array([[Fx, 0, Cx],[0, Fy, Cy],[0, 0, 1]])
157cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
167cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# Order is k1, k2, t1, t2, k3
177cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvaladist = np.array([0.1, -0.003, 0.02, 0.01, 0.004])
187cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
197cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvalanp.random.seed(1234)
207cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
217cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaactiveArray = np.array([[1000, 750]])
227cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
237cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalarawCoords = np.floor(np.random.rand(1000,2) * activeArray)
247cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
257cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# OpenCV needs either row count or col count = 1 for some reason
267cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalarawCoords2 = rawCoords.reshape(-1, 1, 2)
277cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
287cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala# P is the output camera matrix, K is the input; use the same for both
297cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville TalvalaexpCoords = cv2.undistortPoints(rawCoords2, K, dist, P = K)
307cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
317cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvalawith open('DistortionMapperTest_OpenCvData.h','w') as f:
327cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('// Generated by DistortionMapperComp.py\n');
337cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('// for use by DistortionMapperTest.cpp\n\n');
347cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
357cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('namespace openCvData {\n')
367cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('std::array<int32_t, %d> rawCoords = {\n' % (rawCoords.shape[0] * rawCoords.shape[1]))
377cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  for i in range(rawCoords.shape[0]):
387cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala    f.write('  %d, %d,\n' % (rawCoords[i][0], rawCoords[i][1]))
397cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('};\n')
407cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
417cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('std::array<int32_t, %d> expCoords = {\n' % (expCoords.shape[0] * expCoords.shape[2]))
427cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  for i in range(expCoords.shape[0]):
437cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala    f.write('  %d, %d,\n' % (expCoords[i][0][0], expCoords[i][0][1]))
447cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('};\n')
457cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala  f.write('} // namespace openCvData\n')
467cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvala
477cffc831bcf26e6ef973e615e3002b78c344fcfbEino-Ville Talvalaprint "DistortionMapperTest_OpenCvData.h generated"
48