ENH: Fix cvUndistort2 according to OpenCV 2.1 calling convention.

This commit is contained in:
Stefan van der Walt
2010-12-02 13:48:00 +02:00
parent f8a3ea48bd
commit c11a226261
+14 -4
View File
@@ -275,7 +275,7 @@ c_cvCalibrateCamera2 = (<cvCalibrateCamera2Ptr*>
<size_t>ctypes.addressof(cv.cvCalibrateCamera2))[0]
# cvUndistort2
ctypedef void (*cvUndistort2Ptr)(IplImage*, IplImage*, CvMat*, CvMat*)
ctypedef void (*cvUndistort2Ptr)(IplImage*, IplImage*, CvMat*, CvMat*, CvMat*)
cdef cvUndistort2Ptr c_cvUndistort2
c_cvUndistort2 = (<cvUndistort2Ptr*><size_t>ctypes.addressof(cv.cvUndistort2))[0]
@@ -2241,7 +2241,7 @@ def cvCalibrateCamera2(np.ndarray object_points, np.ndarray image_points,
#-------------
@cvdoc(package='cv', group='calibration', doc=\
'''cvUndistort2(src, intrinsics, distortions)
'''cvUndistort2(src, intrinsics, distortions, new_intrinsics=None)
Undistorts an image given the camera intrinsics matrix and distortions vector.
These values can be calculated using cvCalibrateCamera2.
@@ -2254,13 +2254,16 @@ intrinsics : ndarray, 3x3, dtype=float64
The camera intrinsics matrix.
distortions : ndarray, 5-vector, dtype=float64
The camera distortion coefficients.
new_intrinsics : ndarray, 3x3, dtype=float64, optional
Determine the subset of the source image that is visible after
correction.
Returns
-------
out : ndarray
The undistorted image the same size and dtype
as the source image.''')
def cvUndistort2(src, intrinsics, distortions):
def cvUndistort2(src, intrinsics, distortions, new_intrinsics=None):
validate_array(src)
assert_dtype(intrinsics, [FLOAT64])
assert_dtype(distortions, [FLOAT64])
@@ -2278,19 +2281,26 @@ def cvUndistort2(src, intrinsics, distortions):
cdef IplImage outimg
cdef IplImage intrimg
cdef IplImage distimg
cdef IplImage new_intrinsics_img
populate_iplimage(src, &srcimg)
populate_iplimage(out, &outimg)
populate_iplimage(intrinsics, &intrimg)
populate_iplimage(distortions, &distimg)
cdef CvMat* cvnew_intrinsics = NULL
cdef CvMat* cvintr = cvmat_ptr_from_iplimage(&intrimg)
cdef CvMat* cvdist = cvmat_ptr_from_iplimage(&distimg)
c_cvUndistort2(&srcimg, &outimg, cvintr, cvdist)
if new_intrinsics is not None:
populate_iplimage(new_intrinsics, &new_intrinsics_img)
cvnew_intrinsics = cvmat_ptr_from_iplimage(&new_intrinsics_img)
c_cvUndistort2(&srcimg, &outimg, cvintr, cvdist, cvnew_intrinsics)
PyMem_Free(cvintr)
PyMem_Free(cvdist)
PyMem_Free(cvnew_intrinsics)
return out