Add cv::logPolar, cv::linearPolar, and a python example

This commit is contained in:
John Stowers 2013-09-10 13:35:57 +02:00
parent ada858e1c0
commit 51341738ba
3 changed files with 55 additions and 7 deletions

View File

@ -76,14 +76,15 @@ enum { MORPH_RECT = 0,
};
//! interpolation algorithm
enum { INTER_NEAREST = 0, //!< nearest neighbor interpolation
INTER_LINEAR = 1, //!< bilinear interpolation
INTER_CUBIC = 2, //!< bicubic interpolation
INTER_AREA = 3, //!< area-based (or super) interpolation
INTER_LANCZOS4 = 4, //!< Lanczos interpolation over 8x8 neighborhood
enum { INTER_NEAREST = 0, //!< nearest neighbor interpolation
INTER_LINEAR = 1, //!< bilinear interpolation
INTER_CUBIC = 2, //!< bicubic interpolation
INTER_AREA = 3, //!< area-based (or super) interpolation
INTER_LANCZOS4 = 4, //!< Lanczos interpolation over 8x8 neighborhood
INTER_MAX = 7, //!< mask for interpolation codes
WARP_INVERSE_MAP = 16
INTER_MAX = 7, //!< mask for interpolation codes
WARP_FILL_OUTLIERS = 8,
WARP_INVERSE_MAP = 16
};
enum { INTER_BITS = 5,
@ -1223,6 +1224,14 @@ CV_EXPORTS_W Mat getAffineTransform( InputArray src, InputArray dst );
CV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize,
Point2f center, OutputArray patch, int patchType = -1 );
//! computes the log polar transform
CV_EXPORTS_W void logPolar( InputArray src, OutputArray dst,
Point2f center, double M, int flags );
//! computes the linear polar transform
CV_EXPORTS_W void linearPolar( InputArray src, OutputArray dst,
Point2f center, double maxRadius, int flags );
//! computes the integral image
CV_EXPORTS_W void integral( InputArray src, OutputArray sum, int sdepth = -1 );

View File

@ -4329,6 +4329,14 @@ cvLogPolar( const CvArr* srcarr, CvArr* dstarr,
cvRemap( src, dst, mapx, mapy, flags, cvScalarAll(0) );
}
void cv::logPolar( InputArray _src, OutputArray _dst,
Point2f center, double M, int flags )
{
Mat src = _src.getMat();
_dst.create( src.size(), src.type() );
CvMat c_src = src, c_dst = _dst.getMat();
cvLogPolar( &c_src, &c_dst, center, M, flags );
}
/****************************************************************************************
Linear-Polar Transform
@ -4424,5 +4432,13 @@ void cvLinearPolar( const CvArr* srcarr, CvArr* dstarr,
cvRemap( src, dst, mapx, mapy, flags, cvScalarAll(0) );
}
void cv::linearPolar( InputArray _src, OutputArray _dst,
Point2f center, double maxRadius, int flags )
{
Mat src = _src.getMat();
_dst.create( src.size(), src.type() );
CvMat c_src = src, c_dst = _dst.getMat();
cvLinearPolar( &c_src, &c_dst, center, maxRadius, flags );
}
/* End of file. */

View File

@ -0,0 +1,23 @@
#!/usr/bin/env python
import cv2
if __name__ == '__main__':
import sys
try:
fn = sys.argv[1]
except:
fn = '../cpp/fruits.jpg'
img = cv2.imread(fn)
if img is None:
print 'Failed to load image file:', fn
sys.exit(1)
img2 = cv2.logPolar(img, (img.shape[0]/2, img.shape[1]/2), 40, cv2.WARP_FILL_OUTLIERS)
img3 = cv2.linearPolar(img, (img.shape[0]/2, img.shape[1]/2), 40, cv2.WARP_FILL_OUTLIERS)
cv2.imshow('before', img)
cv2.imshow('logpolar', img2)
cv2.imshow('linearpolar', img3)
cv2.waitKey(0)