diff --git a/scikits/image/opencv/opencv_cv.pyx b/scikits/image/opencv/opencv_cv.pyx index c728eeb7..fb10f255 100644 --- a/scikits/image/opencv/opencv_cv.pyx +++ b/scikits/image/opencv/opencv_cv.pyx @@ -275,7 +275,7 @@ c_cvCalibrateCamera2 = ( 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 = (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