Commit bfbc7043 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

fixed crash in cv2.findHomography() (ticket #1094)

parent f26859b3
...@@ -247,9 +247,8 @@ cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints, ...@@ -247,9 +247,8 @@ cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints,
CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) && CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) &&
(mask->rows == 1 || mask->cols == 1) && (mask->rows == 1 || mask->cols == 1) &&
mask->rows*mask->cols == count ); mask->rows*mask->cols == count );
tempMask = cvCloneMat(mask);
} }
else if( count > 4 ) if( mask || count > 4 )
tempMask = cvCreateMat( 1, count, CV_8U ); tempMask = cvCreateMat( 1, count, CV_8U );
if( !tempMask.empty() ) if( !tempMask.empty() )
cvSet( tempMask, cvScalarAll(1.) ); cvSet( tempMask, cvScalarAll(1.) );
...@@ -278,7 +277,12 @@ cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints, ...@@ -278,7 +277,12 @@ cvFindHomography( const CvMat* objectPoints, const CvMat* imagePoints,
cvConvert( &matH, __H ); cvConvert( &matH, __H );
if( mask && tempMask ) if( mask && tempMask )
cvCopy( tempMask, mask ); {
if( CV_ARE_SIZES_EQ(mask, tempMask) )
cvCopy( tempMask, mask );
else
cvTranspose( tempMask, mask );
}
return (int)result; return (int)result;
} }
...@@ -611,9 +615,8 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, ...@@ -611,9 +615,8 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) && CV_Assert( CV_IS_MASK_ARR(mask) && CV_IS_MAT_CONT(mask->type) &&
(mask->rows == 1 || mask->cols == 1) && (mask->rows == 1 || mask->cols == 1) &&
mask->rows*mask->cols == count ); mask->rows*mask->cols == count );
tempMask = cvCloneMat(mask);
} }
else if( count > 8 ) if( mask || count > 8 )
tempMask = cvCreateMat( 1, count, CV_8U ); tempMask = cvCreateMat( 1, count, CV_8U );
if( !tempMask.empty() ) if( !tempMask.empty() )
cvSet( tempMask, cvScalarAll(1.) ); cvSet( tempMask, cvScalarAll(1.) );
...@@ -647,7 +650,12 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, ...@@ -647,7 +650,12 @@ CV_IMPL int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2,
cvConvert( fmatrix->rows == 3 ? &_F3x3 : &_F9x3, fmatrix ); cvConvert( fmatrix->rows == 3 ? &_F3x3 : &_F9x3, fmatrix );
if( mask && tempMask ) if( mask && tempMask )
cvCopy( tempMask, mask ); {
if( CV_ARE_SIZES_EQ(mask, tempMask) )
cvCopy( tempMask, mask );
else
cvTranspose( tempMask, mask );
}
return result; return result;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment