diff --git a/modules/js/src/embindgen.py b/modules/js/src/embindgen.py index 8fe17b86afdb29398fb7e45ca019fae992fa398e..64f009d8c2e859de05cb7b031307025abcb4bb71 100644 --- a/modules/js/src/embindgen.py +++ b/modules/js/src/embindgen.py @@ -143,7 +143,7 @@ features2d = {'Feature2D': ['detect', 'compute', 'detectAndCompute', 'descriptor 'BFMatcher': ['isMaskSupported', 'create'], '': ['drawKeypoints', 'drawMatches', 'drawMatchesKnn']} -calib3d = {'': ['findHomography']} +calib3d = {'': ['findHomography', 'Rodrigues']} def makeWhiteList(module_list): wl = {} diff --git a/modules/js/test/test_calib3d.js b/modules/js/test/test_calib3d.js index f3fe87e0a394bfd6f802230dead22c5f33615e9e..d03c659dbe356c23cb4ddcc0ec708866366443c1 100644 --- a/modules/js/test/test_calib3d.js +++ b/modules/js/test/test_calib3d.js @@ -41,3 +41,27 @@ QUnit.test('findHomography', function(assert) { assert.ok(mat instanceof cv.Mat); }); + +QUnit.test('Rodrigues', function(assert) { + // Converts a rotation matrix to a rotation vector and vice versa + // data64F is the output array + const rvec0 = cv.matFromArray(1, 3, cv.CV_64F, [1,1,1]); + let rMat0 = new cv.Mat(); + let rvec1 = new cv.Mat(); + + // Args: input Mat, output Mat. The function mutates the output Mat, so the function does not return anything. + // cv.Rodrigues (InputArray=src, OutputArray=dst, jacobian=0) + // https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#void%20Rodrigues(InputArray%20src,%20OutputArray%20dst,%20OutputArray%20jacobian) + // vec to Mat, starting number is 3 long and each element is 1. + cv.Rodrigues(rvec0, rMat0); + + assert.ok(rMat0.data64F.length == 9); + assert.ok(0.23 > rMat0.data64F[0] > 0.22); + + // convert Mat to Vec, should be same as what we started with, 3 long and each item should be a 1. + cv.Rodrigues(rMat0, rvec1); + + assert.ok(rvec1.data64F.length == 3); + assert.ok(1.01 > rvec1.data64F[0] > 0.9); + // Answer should be around 1: 0.9999999999999999 +});