Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

openCV - draw color contours on greyscale image

I'm working on a segmentation algorithme for medical images and during the process it must display the evolving contour on the original image.
I'm working with greyscale JPEG. In order to display the contours I use the drawContours function but I can't manage to draw a color contour. I would like to draw a red contour on the greyscale image but it only appears black or white.
Here is the section of the code:

Mat_<uchar> matrix = imread(path,0);
int row = matrix.rows;
int col = matrix.cols;
Mat_<uchar> maskInter(row,col);
for (int i=0; i<row; i++)
    for (int j=0; j<col; j++)
    {
        if ((double)matrix(i,j) <0)
        {maskInter(i,j)=255;}
        else
        {maskInter(i,j)=0;}
    };

vector<vector<Point> > contours; 
vector<Vec4i> hierarchy;
Mat mat_out = maskInter.clone();
findContours( mat_out, contours, hierarchy, CV_RETR_TREE , CHAIN_APPROX_SIMPLE);

drawContours( img, contours, -1, RGB(255,0,0),1.5,8,hierarchy,2,Point());
namedWindow(title);
moveWindow(title, 100, 100);
imshow(title, img);
waitKey(0);

Is it possible to display a color contour on a greyscale image?
Thanks

like image 826
alvinleetya Avatar asked Nov 18 '12 16:11

alvinleetya


People also ask

How do you draw contours on a CV?

To draw the contours, cv. drawContours function is used. It can also be used to draw any shape provided you have its boundary points. Its first argument is source image, second argument is the contours which should be passed as a Python list, third argument is index of contours (useful when drawing individual contour.

How do I convert a grayscale image to color in Python?

Convert an Image to Grayscale in Python Using the color. rgb2gray() Method of the scikit-image Module. The color. rgb2gray() takes an image in RGB format as input and returns a grayscale copy of the input image.


1 Answers

You need a 3-channel (RGB) image in order to draw and display colors. Your Mat_<uchar> matrix is only one channel. You can convert your grayscale image to a color image as follows:

  // read image
  cv::Mat img_gray = imread(path,0);

  // create 8bit color image. IMPORTANT: initialize image otherwise it will result in 32F
  cv::Mat img_rgb(img_gray.size(), CV_8UC3);

  // convert grayscale to color image
  cv::cvtColor(img_gray, img_rgb, CV_GRAY2RGB);
like image 160
cfo Avatar answered Oct 03 '22 04:10

cfo