diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index 47883c46c..6f09e7f4d 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -2620,7 +2620,7 @@ struct CV_EXPORTS DrawMatchesFlags }; // Draw keypoints. -CV_EXPORTS void drawKeypoints( const Mat& image, const vector& keypoints, Mat& outImg, +CV_EXPORTS void drawKeypoints( const Mat& image, const vector& keypoints, Mat& outImage, const Scalar& color=Scalar::all(-1), int flags=DrawMatchesFlags::DEFAULT ); // Draws matches of keypints from two images on output image. diff --git a/modules/features2d/src/draw.cpp b/modules/features2d/src/draw.cpp index 6e4c42857..ff0c74b3a 100755 --- a/modules/features2d/src/draw.cpp +++ b/modules/features2d/src/draw.cpp @@ -88,11 +88,24 @@ static inline void _drawKeypoint( Mat& img, const KeyPoint& p, const Scalar& col } } -void drawKeypoints( const Mat& image, const vector& keypoints, Mat& outImg, +void drawKeypoints( const Mat& image, const vector& keypoints, Mat& outImage, const Scalar& _color, int flags ) { if( !(flags & DrawMatchesFlags::DRAW_OVER_OUTIMG) ) - cvtColor( image, outImg, CV_GRAY2BGR ); + { + if( image.type() == CV_8UC3 ) + { + image.copyTo( outImage ); + } + else if( image.type() == CV_8UC1 ) + { + cvtColor( image, outImage, CV_GRAY2BGR ); + } + else + { + CV_Error( CV_StsBadArg, "Incorrect type of input image.\n" ); + } + } RNG& rng=theRNG(); bool isRandColor = _color == Scalar::all(-1); @@ -100,7 +113,7 @@ void drawKeypoints( const Mat& image, const vector& keypoints, Mat& ou for( vector::const_iterator i = keypoints.begin(), ie = keypoints.end(); i != ie; ++i ) { Scalar color = isRandColor ? Scalar(rng(256), rng(256), rng(256)) : _color; - _drawKeypoint( outImg, *i, color, flags ); + _drawKeypoint( outImage, *i, color, flags ); } }