Merge pull request #16405 from ganesh-k13:bugfix/solvepnp-crash
Added type check for solvePnPGeneric | Issue: #16049 * Added type check * Added checks before type fix * Tests for 16049 * calib3d: update solvePnP regression check (16049)
This commit is contained in:
parent
f4147c99c8
commit
504cd8a9f5
@ -39,6 +39,26 @@ class solvepnp_test(NewOpenCVTests):
|
||||
obj_points, img_points, cameraMatrix, distCoeffs, reprojectionError=r
|
||||
)
|
||||
|
||||
def test_regression_16049(self):
|
||||
obj_points = np.array([[0, 0, 0], [0, 1, 0], [1, 1, 0], [1, 0, 0]], dtype=np.float32)
|
||||
img_points = np.array(
|
||||
[[[700, 400], [700, 600], [900, 600], [900, 400]]], dtype=np.float32
|
||||
)
|
||||
|
||||
cameraMatrix = np.array(
|
||||
[[712.0634, 0, 800], [0, 712.540, 500], [0, 0, 1]], dtype=np.float32
|
||||
)
|
||||
distCoeffs = np.array([[0, 0, 0, 0]], dtype=np.float32)
|
||||
x, r, t, e = cv.solvePnPGeneric(
|
||||
obj_points, img_points, cameraMatrix, distCoeffs
|
||||
)
|
||||
if e is None:
|
||||
# noArray() is supported, see https://github.com/opencv/opencv/issues/16049
|
||||
pass
|
||||
else:
|
||||
eDump = cv.utils.dumpInputArray(e)
|
||||
self.assertEqual(eDump, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=1 dims(-1)=2 size(-1)=1x1 type(-1)=CV_32FC1")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
NewOpenCVTests.bootstrap()
|
||||
|
||||
@ -1009,7 +1009,10 @@ int solvePnPGeneric( InputArray _opoints, InputArray _ipoints,
|
||||
|
||||
if (reprojectionError.needed())
|
||||
{
|
||||
int type = reprojectionError.type();
|
||||
int type = (reprojectionError.fixedType() || !reprojectionError.empty())
|
||||
? reprojectionError.type()
|
||||
: (max(_ipoints.depth(), _opoints.depth()) == CV_64F ? CV_64F : CV_32F);
|
||||
|
||||
reprojectionError.create(solutions, 1, type);
|
||||
CV_CheckType(reprojectionError.type(), type == CV_32FC1 || type == CV_64FC1,
|
||||
"Type of reprojectionError must be CV_32FC1 or CV_64FC1!");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user