Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does one convert a grayscale image to RGB in OpenCV (Python)?

I'm learning image processing using OpenCV for a realtime application. I did some thresholding on an image and want to label the contours in green, but they aren't showing up in green because my image is in black and white.

Early in the program I used gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) to convert from RGB to grayscale, but to go back I'm confused, and the function backtorgb = cv2.cvtColor(gray,cv2.CV_GRAY2RGB) is giving:

AttributeError: 'module' object has no attribute 'CV_GRAY2RGB'.

The code below does not appear to be drawing contours in green. Is this because it's a grayscale image? If so, can I convert the grayscale image back to RGB to visualize the contours in green?

import numpy as np import cv2 import time  cap = cv2.VideoCapture(0) while(cap.isOpened()):      ret, frame = cap.read()      gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)      ret, gb = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)      gb = cv2.bitwise_not(gb)      contour,hier = cv2.findContours(gb,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)      for cnt in contour:         cv2.drawContours(gb,[cnt],0,255,-1)     gray = cv2.bitwise_not(gb)      cv2.drawContours(gray,contour,-1,(0,255,0),3)      cv2.imshow('test', gray)      if cv2.waitKey(1) & 0xFF == ord('q'):         break  cap.release() cv2.destroyAllWindows() 
like image 568
user391339 Avatar asked Feb 06 '14 07:02

user391339


People also ask

How do I convert an image to RGB in OpenCV?

OpenCV uses BGR image format. So, when we read an image using cv2. imread() it interprets in BGR format by default. We can use cvtColor() method to convert a BGR image to RGB and vice-versa.

How do I convert RGB image to grayscale in Python OpenCV?

The conversion from a RGB image to gray is done with: cvtColor(src, bwsrc, cv::COLOR_RGB2GRAY); More advanced channel reordering can also be done with cv::mixChannels.

Why do we convert BGR to RGB in OpenCV?

When the image file is read with the OpenCV function imread() , the order of colors is BGR (blue, green, red). On the other hand, in Pillow, the order of colors is assumed to be RGB (red, green, blue). Therefore, if you want to use both the Pillow function and the OpenCV function, you need to convert BGR and RGB.


1 Answers

I am promoting my comment to an answer:

The easy way is:

You could draw in the original 'frame' itself instead of using gray image.

The hard way (method you were trying to implement):

backtorgb = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB) 

is the correct syntax.

like image 54
Anoop K. Prabhu Avatar answered Sep 21 '22 10:09

Anoop K. Prabhu