made several minor fixes as pointed out by Andrey
This commit is contained in:
parent
77d647b675
commit
78402bf596
@ -1969,6 +1969,11 @@ static TransposeInplaceFunc transposeInplaceTab[] =
|
|||||||
void cv::transpose( InputArray _src, OutputArray _dst )
|
void cv::transpose( InputArray _src, OutputArray _dst )
|
||||||
{
|
{
|
||||||
Mat src = _src.getMat();
|
Mat src = _src.getMat();
|
||||||
|
if( src.empty() )
|
||||||
|
{
|
||||||
|
_dst.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
size_t esz = src.elemSize();
|
size_t esz = src.elemSize();
|
||||||
CV_Assert( src.dims <= 2 && esz <= (size_t)32 );
|
CV_Assert( src.dims <= 2 && esz <= (size_t)32 );
|
||||||
|
|
||||||
|
@ -31,12 +31,11 @@ PERF_TEST_P(Image_RhoStep_ThetaStep_Threshold, HoughLines,
|
|||||||
|
|
||||||
Canny(image, image, 0, 0);
|
Canny(image, image, 0, 0);
|
||||||
|
|
||||||
Mat lines_t, lines;
|
Mat lines;
|
||||||
declare.time(60);
|
declare.time(60);
|
||||||
|
|
||||||
TEST_CYCLE() HoughLines(image, lines_t, rhoStep, thetaStep, threshold);
|
TEST_CYCLE() HoughLines(image, lines, rhoStep, thetaStep, threshold);
|
||||||
|
|
||||||
if( !lines_t.empty() )
|
transpose(lines, lines);
|
||||||
transpose(lines_t, lines);
|
|
||||||
SANITY_CHECK(lines);
|
SANITY_CHECK(lines);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ void cv::cornerSubPix( InputArray _image, InputOutputArray _corners,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CV_Assert( win.width > 0 && win.height > 0 );
|
CV_Assert( win.width > 0 && win.height > 0 );
|
||||||
CV_Assert( src.cols >= win_w + 4 && src.rows >= win_h + 4 );
|
CV_Assert( src.cols >= win.width*2 + 5 && src.rows >= win.height*2 + 5 );
|
||||||
CV_Assert( src.channels() == 1 );
|
CV_Assert( src.channels() == 1 );
|
||||||
|
|
||||||
Mat maskm(win_h, win_w, CV_32F), subpix_buf(win_h+2, win_w+2, CV_32F);
|
Mat maskm(win_h, win_w, CV_32F), subpix_buf(win_h+2, win_w+2, CV_32F);
|
||||||
|
@ -592,6 +592,88 @@ trueDistTrans( const Mat& src, Mat& dst )
|
|||||||
cv::parallel_for(cv::BlockedRange(0, m), cv::DTRowInvoker(&dst, sqr_tab, inv_tab));
|
cv::parallel_for(cv::BlockedRange(0, m), cv::DTRowInvoker(&dst, sqr_tab, inv_tab));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************************************\
|
||||||
|
Non-inplace and Inplace 8u->8u Distance Transform for CityBlock (a.k.a. L1) metric
|
||||||
|
(C) 2006 by Jay Stavinzky.
|
||||||
|
\****************************************************************************************/
|
||||||
|
|
||||||
|
//BEGIN ATS ADDITION
|
||||||
|
// 8-bit grayscale distance transform function
|
||||||
|
static void
|
||||||
|
distanceATS_L1_8u( const Mat& src, Mat& dst )
|
||||||
|
{
|
||||||
|
int width = src.cols, height = src.rows;
|
||||||
|
|
||||||
|
int a;
|
||||||
|
uchar lut[256];
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
const uchar *sbase = src.data;
|
||||||
|
uchar *dbase = dst.data;
|
||||||
|
int srcstep = (int)src.step;
|
||||||
|
int dststep = (int)dst.step;
|
||||||
|
|
||||||
|
CV_Assert( src.type() == CV_8UC1 && dst.type() == CV_8UC1 );
|
||||||
|
CV_Assert( src.size() == dst.size() );
|
||||||
|
|
||||||
|
////////////////////// forward scan ////////////////////////
|
||||||
|
for( x = 0; x < 256; x++ )
|
||||||
|
lut[x] = CV_CAST_8U(x+1);
|
||||||
|
|
||||||
|
//init first pixel to max (we're going to be skipping it)
|
||||||
|
dbase[0] = (uchar)(sbase[0] == 0 ? 0 : 255);
|
||||||
|
|
||||||
|
//first row (scan west only, skip first pixel)
|
||||||
|
for( x = 1; x < width; x++ )
|
||||||
|
dbase[x] = (uchar)(sbase[x] == 0 ? 0 : lut[dbase[x-1]]);
|
||||||
|
|
||||||
|
for( y = 1; y < height; y++ )
|
||||||
|
{
|
||||||
|
sbase += srcstep;
|
||||||
|
dbase += dststep;
|
||||||
|
|
||||||
|
//for left edge, scan north only
|
||||||
|
a = sbase[0] == 0 ? 0 : lut[dbase[-dststep]];
|
||||||
|
dbase[0] = (uchar)a;
|
||||||
|
|
||||||
|
for( x = 1; x < width; x++ )
|
||||||
|
{
|
||||||
|
a = sbase[x] == 0 ? 0 : lut[MIN(a, dbase[x - dststep])];
|
||||||
|
dbase[x] = (uchar)a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////// backward scan ///////////////////////
|
||||||
|
|
||||||
|
a = dbase[width-1];
|
||||||
|
|
||||||
|
// do last row east pixel scan here (skip bottom right pixel)
|
||||||
|
for( x = width - 2; x >= 0; x-- )
|
||||||
|
{
|
||||||
|
a = lut[a];
|
||||||
|
dbase[x] = (uchar)(CV_CALC_MIN_8U(a, dbase[x]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// right edge is the only error case
|
||||||
|
for( y = height - 2; y >= 0; y-- )
|
||||||
|
{
|
||||||
|
dbase -= dststep;
|
||||||
|
|
||||||
|
// do right edge
|
||||||
|
a = lut[dbase[width-1+dststep]];
|
||||||
|
dbase[width-1] = (uchar)(MIN(a, dbase[width-1]));
|
||||||
|
|
||||||
|
for( x = width - 2; x >= 0; x-- )
|
||||||
|
{
|
||||||
|
int b = dbase[x+dststep];
|
||||||
|
a = lut[MIN(a, b)];
|
||||||
|
dbase[x] = (uchar)(MIN(a, dbase[x]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//END ATS ADDITION
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -599,11 +681,19 @@ trueDistTrans( const Mat& src, Mat& dst )
|
|||||||
void cv::distanceTransform( InputArray _src, OutputArray _dst, OutputArray _labels,
|
void cv::distanceTransform( InputArray _src, OutputArray _dst, OutputArray _labels,
|
||||||
int distType, int maskSize, int labelType )
|
int distType, int maskSize, int labelType )
|
||||||
{
|
{
|
||||||
Mat src = _src.getMat();
|
Mat src = _src.getMat(), dst = _dst.getMat(), labels;
|
||||||
_dst.create( src.size(), CV_32F );
|
|
||||||
Mat dst = _dst.getMat(), labels;
|
|
||||||
bool need_labels = _labels.needed();
|
bool need_labels = _labels.needed();
|
||||||
|
|
||||||
|
CV_Assert( src.type() == CV_8U );
|
||||||
|
if( dst.size == src.size && dst.type() == CV_8U && !need_labels && distType == CV_DIST_L1 )
|
||||||
|
{
|
||||||
|
distanceATS_L1_8u(src, dst);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_dst.create( src.size(), CV_32F );
|
||||||
|
dst = _dst.getMat();
|
||||||
|
|
||||||
if( need_labels )
|
if( need_labels )
|
||||||
{
|
{
|
||||||
CV_Assert( labelType == DIST_LABEL_PIXEL || labelType == DIST_LABEL_CCOMP );
|
CV_Assert( labelType == DIST_LABEL_PIXEL || labelType == DIST_LABEL_CCOMP );
|
||||||
@ -682,98 +772,15 @@ void cv::distanceTransform( InputArray _src, OutputArray _dst,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************************\
|
|
||||||
Non-inplace and Inplace 8u->8u Distance Transform for CityBlock (a.k.a. L1) metric
|
|
||||||
(C) 2006 by Jay Stavinzky.
|
|
||||||
\****************************************************************************************/
|
|
||||||
|
|
||||||
//BEGIN ATS ADDITION
|
|
||||||
/* 8-bit grayscale distance transform function */
|
|
||||||
static void
|
|
||||||
icvDistanceATS_L1_8u( const cv::Mat& src, cv::Mat& dst )
|
|
||||||
{
|
|
||||||
int width = src.cols, height = src.rows;
|
|
||||||
|
|
||||||
int a;
|
|
||||||
uchar lut[256];
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
const uchar *sbase = src.data;
|
|
||||||
uchar *dbase = dst.data;
|
|
||||||
int srcstep = (int)src.step;
|
|
||||||
int dststep = (int)dst.step;
|
|
||||||
|
|
||||||
CV_Assert( src.type() == CV_8UC1 && dst.type() == CV_8UC1 );
|
|
||||||
CV_Assert( src.size() == dst.size() );
|
|
||||||
|
|
||||||
////////////////////// forward scan ////////////////////////
|
|
||||||
for( x = 0; x < 256; x++ )
|
|
||||||
lut[x] = CV_CAST_8U(x+1);
|
|
||||||
|
|
||||||
//init first pixel to max (we're going to be skipping it)
|
|
||||||
dbase[0] = (uchar)(sbase[0] == 0 ? 0 : 255);
|
|
||||||
|
|
||||||
//first row (scan west only, skip first pixel)
|
|
||||||
for( x = 1; x < width; x++ )
|
|
||||||
dbase[x] = (uchar)(sbase[x] == 0 ? 0 : lut[dbase[x-1]]);
|
|
||||||
|
|
||||||
for( y = 1; y < height; y++ )
|
|
||||||
{
|
|
||||||
sbase += srcstep;
|
|
||||||
dbase += dststep;
|
|
||||||
|
|
||||||
//for left edge, scan north only
|
|
||||||
a = sbase[0] == 0 ? 0 : lut[dbase[-dststep]];
|
|
||||||
dbase[0] = (uchar)a;
|
|
||||||
|
|
||||||
for( x = 1; x < width; x++ )
|
|
||||||
{
|
|
||||||
a = sbase[x] == 0 ? 0 : lut[MIN(a, dbase[x - dststep])];
|
|
||||||
dbase[x] = (uchar)a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////// backward scan ///////////////////////
|
|
||||||
|
|
||||||
a = dbase[width-1];
|
|
||||||
|
|
||||||
// do last row east pixel scan here (skip bottom right pixel)
|
|
||||||
for( x = width - 2; x >= 0; x-- )
|
|
||||||
{
|
|
||||||
a = lut[a];
|
|
||||||
dbase[x] = (uchar)(CV_CALC_MIN_8U(a, dbase[x]));
|
|
||||||
}
|
|
||||||
|
|
||||||
// right edge is the only error case
|
|
||||||
for( y = height - 2; y >= 0; y-- )
|
|
||||||
{
|
|
||||||
dbase -= dststep;
|
|
||||||
|
|
||||||
// do right edge
|
|
||||||
a = lut[dbase[width-1+dststep]];
|
|
||||||
dbase[width-1] = (uchar)(MIN(a, dbase[width-1]));
|
|
||||||
|
|
||||||
for( x = width - 2; x >= 0; x-- )
|
|
||||||
{
|
|
||||||
int b = dbase[x+dststep];
|
|
||||||
a = lut[MIN(a, b)];
|
|
||||||
dbase[x] = (uchar)(MIN(a, dbase[x]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//END ATS ADDITION
|
|
||||||
|
|
||||||
CV_IMPL void
|
CV_IMPL void
|
||||||
cvDistTransform( const void* srcarr, void* dstarr,
|
cvDistTransform( const void* srcarr, void* dstarr,
|
||||||
int distType, int maskSize,
|
int distType, int maskSize,
|
||||||
const float * /*mask*/,
|
const float * /*mask*/,
|
||||||
void* labelsarr, int labelType )
|
void* labelsarr, int labelType )
|
||||||
{
|
{
|
||||||
cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr);
|
cv::Mat src = cv::cvarrToMat(srcarr);
|
||||||
cv::Mat labels = cv::cvarrToMat(labelsarr);
|
const cv::Mat dst = cv::cvarrToMat(dstarr);
|
||||||
|
const cv::Mat labels = cv::cvarrToMat(labelsarr);
|
||||||
if( !labelsarr && distType == CV_DIST_L1 && dst.type() == CV_8U )
|
|
||||||
icvDistanceATS_L1_8u( src, dst );
|
|
||||||
|
|
||||||
cv::distanceTransform(src, dst, labelsarr ? cv::_OutputArray(labels) : cv::_OutputArray(),
|
cv::distanceTransform(src, dst, labelsarr ? cv::_OutputArray(labels) : cv::_OutputArray(),
|
||||||
distType, maskSize, labelType);
|
distType, maskSize, labelType);
|
||||||
|
@ -7,10 +7,11 @@
|
|||||||
// copy or use the software.
|
// copy or use the software.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Intel License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -23,7 +24,7 @@
|
|||||||
// this list of conditions and the following disclaimer in the documentation
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
// and/or other materials provided with the distribution.
|
||||||
//
|
//
|
||||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
// derived from this software without specific prior written permission.
|
// derived from this software without specific prior written permission.
|
||||||
//
|
//
|
||||||
// This software is provided by the copyright holders and contributors "as is" and
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
@ -398,8 +399,8 @@ HoughLinesProbabilistic( Mat& image,
|
|||||||
|
|
||||||
for( int n = 0; n < numangle; n++ )
|
for( int n = 0; n < numangle; n++ )
|
||||||
{
|
{
|
||||||
trigtab[n*2] = (float)(cos(n*theta) * irho);
|
trigtab[n*2] = (float)(cos((double)n*theta) * irho);
|
||||||
trigtab[n*2+1] = (float)(sin(n*theta) * irho);
|
trigtab[n*2+1] = (float)(sin((double)n*theta) * irho);
|
||||||
}
|
}
|
||||||
const float* ttab = &trigtab[0];
|
const float* ttab = &trigtab[0];
|
||||||
uchar* mdata0 = mask.data;
|
uchar* mdata0 = mask.data;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// copy or use the software.
|
// copy or use the software.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||||
@ -298,7 +298,8 @@ void cv::getRectSubPix( InputArray _image, Size patchSize, Point2f center,
|
|||||||
CV_IMPL void
|
CV_IMPL void
|
||||||
cvGetRectSubPix( const void* srcarr, void* dstarr, CvPoint2D32f center )
|
cvGetRectSubPix( const void* srcarr, void* dstarr, CvPoint2D32f center )
|
||||||
{
|
{
|
||||||
cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr);
|
cv::Mat src = cv::cvarrToMat(srcarr);
|
||||||
|
const cv::Mat dst = cv::cvarrToMat(dstarr);
|
||||||
CV_Assert( src.channels() == dst.channels() );
|
CV_Assert( src.channels() == dst.channels() );
|
||||||
|
|
||||||
cv::getRectSubPix(src, dst.size(), center, dst, dst.type());
|
cv::getRectSubPix(src, dst.size(), center, dst, dst.type());
|
||||||
@ -308,7 +309,8 @@ cvGetRectSubPix( const void* srcarr, void* dstarr, CvPoint2D32f center )
|
|||||||
CV_IMPL void
|
CV_IMPL void
|
||||||
cvGetQuadrangleSubPix( const void* srcarr, void* dstarr, const CvMat* mat )
|
cvGetQuadrangleSubPix( const void* srcarr, void* dstarr, const CvMat* mat )
|
||||||
{
|
{
|
||||||
cv::Mat src = cv::cvarrToMat(srcarr), dst = cv::cvarrToMat(dstarr), m = cv::cvarrToMat(mat);
|
cv::Mat src = cv::cvarrToMat(srcarr), m = cv::cvarrToMat(mat);
|
||||||
|
const cv::Mat dst = cv::cvarrToMat(dstarr);
|
||||||
cv::Size win_size = dst.size();
|
cv::Size win_size = dst.size();
|
||||||
double matrix[6];
|
double matrix[6];
|
||||||
cv::Mat M(2, 3, CV_64F, matrix);
|
cv::Mat M(2, 3, CV_64F, matrix);
|
||||||
|
@ -7,10 +7,11 @@
|
|||||||
// copy or use the software.
|
// copy or use the software.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Intel License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
// Copyright (C) 2000, Intel Corporation, all rights reserved.
|
||||||
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -23,7 +24,7 @@
|
|||||||
// this list of conditions and the following disclaimer in the documentation
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
// and/or other materials provided with the distribution.
|
// and/or other materials provided with the distribution.
|
||||||
//
|
//
|
||||||
// * The name of Intel Corporation may not be used to endorse or promote products
|
// * The name of the copyright holders may not be used to endorse or promote products
|
||||||
// derived from this software without specific prior written permission.
|
// derived from this software without specific prior written permission.
|
||||||
//
|
//
|
||||||
// This software is provided by the copyright holders and contributors "as is" and
|
// This software is provided by the copyright holders and contributors "as is" and
|
||||||
@ -529,7 +530,7 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
|
|||||||
CvTermCriteria termcrit )
|
CvTermCriteria termcrit )
|
||||||
{
|
{
|
||||||
cv::Mat src = cv::cvarrToMat(srcarr);
|
cv::Mat src = cv::cvarrToMat(srcarr);
|
||||||
cv::Mat dst = cv::cvarrToMat(dstarr);
|
const cv::Mat dst = cv::cvarrToMat(dstarr);
|
||||||
|
|
||||||
cv::pyrMeanShiftFiltering(src, dst, sp0, sr, max_level, termcrit);
|
cv::pyrMeanShiftFiltering(src, dst, sp0, sr, max_level, termcrit);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user