openCV - draw color contours on greyscale image

colors, contour, grayscale, image, opencv

Solution

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

Problem

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

Original source