How do I convert an RGB picture into graysacle using simplecv?

Question:

So working with windows, python 2.7 and simplecv I am making a live video with my webcam and want simplecv to give me a grayscale version of the video. Is there any simple way to achieve that?
I found the command

grayscale()

on the opencv page, which should do exactly that but when I run it I get the error:

NameError: name "grayscale" is not defined

I am currently using this prewritten code for object tracking but I don’t know whether I should use the command I found, and where in the code I should put it, does anybody have an idea? :

print __doc__

import SimpleCV

display = SimpleCV.Display()
cam = SimpleCV.Camera()
normaldisplay = True

while display.isNotDone():

      if display.mouseRight:
          normaldisplay = not(normaldisplay)
          print "Display Mode:", "Normal" if normaldisplay else "Segmented" 

      img = cam.getImage().flipHorizontal()
      dist = img.colorDistance(SimpleCV.Color.BLACK).dilate(2)
      segmented = dist.stretch(200,255)
      blobs = segmented.findBlobs()
      if blobs:
         circles = blobs.filter([b.isCircle(0.2) for b in blobs])
         if circles:
             img.drawCircle((circles[-1].x, circles[-1].y), circles[-1].radius(),SimpleCV.Color.BLUE,3)

if normaldisplay:
    img.show() 
else:
    segmented.show()
Asked By: Jennan

||

Answers:

In simple cv theres a function called toGray() for example:

import SimpleCV as sv
img = img.jpg
sv.img.jpg.toGray()
    return gimg.jpg
Answered By: thesonyman101

There are multiple ways to do this in SimpleCV.
One way has been already described, it’s the toGray() method.
There’s also a way you can do this with gaussian blur, which also helps to remove image noise:

from SimpleCV import *
img = Image("simplecv")
img.applyGaussianFilter(grayscale=True)

After the third line, img object contains the image with a lot less high-frequency noise, and converted to grayscale.

You may check out pyimagesearch.com who works with OpenCV, but he explains why applying Gaussian Blur is a good idea.

Answered By: Jan Novák