From 1748f65f54bca8f217a3cf2f798bfa0f7b78b650 Mon Sep 17 00:00:00 2001 From: Maria Dimashova <no@email> Date: Mon, 31 Jan 2011 09:51:17 +0000 Subject: [PATCH] fixed ticket #823 --- .../include/opencv2/features2d/features2d.hpp | 2 +- modules/features2d/src/draw.cpp | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) 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<KeyPoint>& keypoints, Mat& outImg, +CV_EXPORTS void drawKeypoints( const Mat& image, const vector<KeyPoint>& 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<KeyPoint>& keypoints, Mat& outImg, +void drawKeypoints( const Mat& image, const vector<KeyPoint>& 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<KeyPoint>& keypoints, Mat& ou for( vector<KeyPoint>::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 ); } }