fixed mat.push_back(mat) (ticket #1091)
This commit is contained in:
@@ -579,8 +579,13 @@ void Mat::push_back(const Mat& elems)
|
|||||||
int r = size.p[0], delta = elems.size.p[0];
|
int r = size.p[0], delta = elems.size.p[0];
|
||||||
if( delta == 0 )
|
if( delta == 0 )
|
||||||
return;
|
return;
|
||||||
if( this != &elems )
|
if( this == &elems )
|
||||||
{
|
{
|
||||||
|
Mat tmp = elems;
|
||||||
|
push_back(tmp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
size.p[0] = elems.size.p[0];
|
size.p[0] = elems.size.p[0];
|
||||||
bool eq = size == elems.size;
|
bool eq = size == elems.size;
|
||||||
size.p[0] = r;
|
size.p[0] = r;
|
||||||
@@ -588,7 +593,6 @@ void Mat::push_back(const Mat& elems)
|
|||||||
CV_Error(CV_StsUnmatchedSizes, "");
|
CV_Error(CV_StsUnmatchedSizes, "");
|
||||||
if( type() != elems.type() )
|
if( type() != elems.type() )
|
||||||
CV_Error(CV_StsUnmatchedFormats, "");
|
CV_Error(CV_StsUnmatchedFormats, "");
|
||||||
}
|
|
||||||
|
|
||||||
if( isSubmatrix() || dataend + step.p[0]*delta > datalimit )
|
if( isSubmatrix() || dataend + step.p[0]*delta > datalimit )
|
||||||
reserve( std::max(r + delta, (r*3+1)/2) );
|
reserve( std::max(r + delta, (r*3+1)/2) );
|
||||||
|
Reference in New Issue
Block a user