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 );
     }
 }