@ -183,7 +183,8 @@ static void _prepareImgAndDrawKeypoints( InputArray img1, const std::vector<KeyP
}
}
static inline void _drawMatch ( InputOutputArray outImg , InputOutputArray outImg1 , InputOutputArray outImg2 ,
static inline void _drawMatch ( InputOutputArray outImg , InputOutputArray outImg1 , InputOutputArray outImg2 ,
const KeyPoint & kp1 , const KeyPoint & kp2 , const Scalar & matchColor , int flags )
const KeyPoint & kp1 , const KeyPoint & kp2 , const Scalar & matchColor , int flags ,
const int matchesThickness )
{
{
RNG & rng = theRNG ( ) ;
RNG & rng = theRNG ( ) ;
bool isRandMatchColor = matchColor = = Scalar : : all ( - 1 ) ;
bool isRandMatchColor = matchColor = = Scalar : : all ( - 1 ) ;
@ -199,7 +200,7 @@ static inline void _drawMatch( InputOutputArray outImg, InputOutputArray outImg1
line ( outImg ,
line ( outImg ,
Point ( cvRound ( pt1 . x * draw_multiplier ) , cvRound ( pt1 . y * draw_multiplier ) ) ,
Point ( cvRound ( pt1 . x * draw_multiplier ) , cvRound ( pt1 . y * draw_multiplier ) ) ,
Point ( cvRound ( dpt2 . x * draw_multiplier ) , cvRound ( dpt2 . y * draw_multiplier ) ) ,
Point ( cvRound ( dpt2 . x * draw_multiplier ) , cvRound ( dpt2 . y * draw_multiplier ) ) ,
color , 1 , LINE_AA , draw_shift_bits ) ;
color , matchesThickness , LINE_AA , draw_shift_bits ) ;
}
}
void drawMatches ( InputArray img1 , const std : : vector < KeyPoint > & keypoints1 ,
void drawMatches ( InputArray img1 , const std : : vector < KeyPoint > & keypoints1 ,
@ -207,6 +208,21 @@ void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
const std : : vector < DMatch > & matches1to2 , InputOutputArray outImg ,
const std : : vector < DMatch > & matches1to2 , InputOutputArray outImg ,
const Scalar & matchColor , const Scalar & singlePointColor ,
const Scalar & matchColor , const Scalar & singlePointColor ,
const std : : vector < char > & matchesMask , int flags )
const std : : vector < char > & matchesMask , int flags )
{
drawMatches ( img1 , keypoints1 ,
img2 , keypoints2 ,
matches1to2 , outImg ,
1 , matchColor ,
singlePointColor , matchesMask ,
flags ) ;
}
void drawMatches ( InputArray img1 , const std : : vector < KeyPoint > & keypoints1 ,
InputArray img2 , const std : : vector < KeyPoint > & keypoints2 ,
const std : : vector < DMatch > & matches1to2 , InputOutputArray outImg ,
const int matchesThickness , const Scalar & matchColor ,
const Scalar & singlePointColor , const std : : vector < char > & matchesMask ,
int flags )
{
{
if ( ! matchesMask . empty ( ) & & matchesMask . size ( ) ! = matches1to2 . size ( ) )
if ( ! matchesMask . empty ( ) & & matchesMask . size ( ) ! = matches1to2 . size ( ) )
CV_Error ( Error : : StsBadSize , " matchesMask must have the same size as matches1to2 " ) ;
CV_Error ( Error : : StsBadSize , " matchesMask must have the same size as matches1to2 " ) ;
@ -226,11 +242,12 @@ void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
CV_Assert ( i2 > = 0 & & i2 < static_cast < int > ( keypoints2 . size ( ) ) ) ;
CV_Assert ( i2 > = 0 & & i2 < static_cast < int > ( keypoints2 . size ( ) ) ) ;
const KeyPoint & kp1 = keypoints1 [ i1 ] , & kp2 = keypoints2 [ i2 ] ;
const KeyPoint & kp1 = keypoints1 [ i1 ] , & kp2 = keypoints2 [ i2 ] ;
_drawMatch ( outImg , outImg1 , outImg2 , kp1 , kp2 , matchColor , flags ) ;
_drawMatch ( outImg , outImg1 , outImg2 , kp1 , kp2 , matchColor , flags , matchesThickness ) ;
}
}
}
}
}
}
void drawMatches ( InputArray img1 , const std : : vector < KeyPoint > & keypoints1 ,
void drawMatches ( InputArray img1 , const std : : vector < KeyPoint > & keypoints1 ,
InputArray img2 , const std : : vector < KeyPoint > & keypoints2 ,
InputArray img2 , const std : : vector < KeyPoint > & keypoints2 ,
const std : : vector < std : : vector < DMatch > > & matches1to2 , InputOutputArray outImg ,
const std : : vector < std : : vector < DMatch > > & matches1to2 , InputOutputArray outImg ,
@ -254,7 +271,7 @@ void drawMatches( InputArray img1, const std::vector<KeyPoint>& keypoints1,
if ( matchesMask . empty ( ) | | matchesMask [ i ] [ j ] )
if ( matchesMask . empty ( ) | | matchesMask [ i ] [ j ] )
{
{
const KeyPoint & kp1 = keypoints1 [ i1 ] , & kp2 = keypoints2 [ i2 ] ;
const KeyPoint & kp1 = keypoints1 [ i1 ] , & kp2 = keypoints2 [ i2 ] ;
_drawMatch ( outImg , outImg1 , outImg2 , kp1 , kp2 , matchColor , flags ) ;
_drawMatch ( outImg , outImg1 , outImg2 , kp1 , kp2 , matchColor , flags , 1 ) ;
}
}
}
}
}
}