cv::polarToCart
This commit is contained in:
@@ -729,6 +729,22 @@ void polarToCart( InputArray src1, InputArray src2,
|
|||||||
dst2.create( Angle.dims, Angle.size, type );
|
dst2.create( Angle.dims, Angle.size, type );
|
||||||
Mat X = dst1.getMat(), Y = dst2.getMat();
|
Mat X = dst1.getMat(), Y = dst2.getMat();
|
||||||
|
|
||||||
|
#ifdef HAVE_IPP
|
||||||
|
if (Mag.isContinuous() && Angle.isContinuous() && X.isContinuous() && Y.isContinuous() && !angleInDegrees)
|
||||||
|
{
|
||||||
|
typedef IppStatus (CV_STDCALL * ippsPolarToCart)(const void * pSrcMagn, const void * pSrcPhase,
|
||||||
|
void * pDstRe, void * pDstIm, int len);
|
||||||
|
ippsPolarToCart ippFunc =
|
||||||
|
depth == CV_32F ? (ippsPolarToCart)ippsPolarToCart_32f :
|
||||||
|
depth == CV_64F ? (ippsPolarToCart)ippsPolarToCart_64f : 0;
|
||||||
|
CV_Assert(ippFunc != 0);
|
||||||
|
|
||||||
|
IppStatus status = ippFunc(Mag.data, Angle.data, X.data, Y.data, static_cast<int>(cn * X.total()));
|
||||||
|
if (status == ippStsNoErr)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0};
|
const Mat* arrays[] = {&Mag, &Angle, &X, &Y, 0};
|
||||||
uchar* ptrs[4];
|
uchar* ptrs[4];
|
||||||
NAryMatIterator it(arrays, ptrs);
|
NAryMatIterator it(arrays, ptrs);
|
||||||
|
@@ -4016,54 +4016,54 @@ private:
|
|||||||
/*
|
/*
|
||||||
#if defined (HAVE_IPP) && IPP_VERSION_MAJOR >= 8 IPP_VERSION_MINOR >= 1
|
#if defined (HAVE_IPP) && IPP_VERSION_MAJOR >= 8 IPP_VERSION_MINOR >= 1
|
||||||
class IPPWarpAffineInvoker :
|
class IPPWarpAffineInvoker :
|
||||||
public ParallelLoopBody
|
public ParallelLoopBody
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
IPPWarpAffineInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[2][3], int &_interpolation, int _borderType,
|
IPPWarpAffineInvoker(Mat &_src, Mat &_dst, double (&_coeffs)[2][3], int &_interpolation, int _borderType,
|
||||||
const Scalar &_borderValue, ippiWarpAffineBackFunc _func, bool *_ok) :
|
const Scalar &_borderValue, ippiWarpAffineBackFunc _func, bool *_ok) :
|
||||||
ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs),
|
ParallelLoopBody(), src(_src), dst(_dst), mode(_interpolation), coeffs(_coeffs),
|
||||||
borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok)
|
borderType(_borderType), borderValue(_borderValue), func(_func), ok(_ok)
|
||||||
{
|
{
|
||||||
*ok = true;
|
*ok = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void operator() (const Range& range) const
|
virtual void operator() (const Range& range) const
|
||||||
{
|
{
|
||||||
IppiSize srcsize = { src.cols, src.rows };
|
IppiSize srcsize = { src.cols, src.rows };
|
||||||
IppiRect srcroi = { 0, 0, src.cols, src.rows };
|
IppiRect srcroi = { 0, 0, src.cols, src.rows };
|
||||||
IppiRect dstroi = { 0, range.start, dst.cols, range.end - range.start };
|
IppiRect dstroi = { 0, range.start, dst.cols, range.end - range.start };
|
||||||
int cnn = src.channels();
|
int cnn = src.channels();
|
||||||
if( borderType == BORDER_CONSTANT )
|
if( borderType == BORDER_CONSTANT )
|
||||||
{
|
{
|
||||||
IppiSize setSize = { dst.cols, range.end - range.start };
|
IppiSize setSize = { dst.cols, range.end - range.start };
|
||||||
void *dataPointer = dst.data + dst.step[0] * range.start;
|
void *dataPointer = dst.data + dst.step[0] * range.start;
|
||||||
if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) )
|
if( !IPPSet( borderValue, dataPointer, (int)dst.step[0], setSize, cnn, src.depth() ) )
|
||||||
{
|
{
|
||||||
*ok = false;
|
*ok = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////Aug 2013: problem in IPP 7.1, 8.0 : sometimes function return ippStsCoeffErr
|
////Aug 2013: problem in IPP 7.1, 8.0 : sometimes function return ippStsCoeffErr
|
||||||
IppStatus status = func( src.data, srcsize, (int)src.step[0], srcroi, dst.data,
|
IppStatus status = func( src.data, srcsize, (int)src.step[0], srcroi, dst.data,
|
||||||
(int)dst.step[0], dstroi, coeffs, mode );
|
(int)dst.step[0], dstroi, coeffs, mode );
|
||||||
printf("%d\n", status);
|
printf("%d\n", status);
|
||||||
if( status != ippStsNoErr)
|
if( status != ippStsNoErr)
|
||||||
*ok = false;
|
*ok = false;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
Mat &src;
|
Mat &src;
|
||||||
Mat &dst;
|
Mat &dst;
|
||||||
int mode;
|
int mode;
|
||||||
double (&coeffs)[2][3];
|
double (&coeffs)[2][3];
|
||||||
int borderType;
|
int borderType;
|
||||||
Scalar borderValue;
|
Scalar borderValue;
|
||||||
ippiWarpAffineBackFunc func;
|
ippiWarpAffineBackFunc func;
|
||||||
bool *ok;
|
bool *ok;
|
||||||
const IPPWarpAffineInvoker& operator= (const IPPWarpAffineInvoker&);
|
const IPPWarpAffineInvoker& operator= (const IPPWarpAffineInvoker&);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_OPENCL
|
#ifdef HAVE_OPENCL
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user