I need to convert a RGBA image in to Gray scale and then to binary with a threshold but I am not able to do that in python. Here is my code . The error which I get is “AttributeError: module ‘PIL.Image’ has no attribute ‘rgb2gray’”
# Import libraries
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
# Reading an Image
image = Image.open('Board1_1.png')
image_gray = Image.rgb2gray(image)
According to this you can use image_gray = image.convert(‘LA’).
Other libraries like
scipy call this functionality
rgb2gray but the
PIL library you use does not.
What is the difference between the arguments ‘L’ and ‘LA’ inside the function image.convert ?
When I convert the image to gray scale using the argument ‘LA’, I get the dimension of the gray scale image is rows x col x 2 which I don’t understand why there are still two matrix instead of one matrix
I have used the argument ‘LA’ and get the gray scale image which I plotted. I don’t know why only ‘L’ does not work as I get dark image.
image_gray = image.convert('LA')
The gray scale image has two dimension i.e., two matrix (row x col x 2). I can plot it, it looks like a gray scale image. Now I need to binarize it with threshold and plot a histogram. I know the theory but could not find the which function in python can convert gray scale image to binary and then make its histogram.
I have tried this function
'(thresh, im_bw) = cv2.threshold(image_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
I get this error
cv2.error: OpenCV(4.5.3) error: (-5:Bad argument) in function ‘threshold’
Overload resolution failed:
- src is not a numpy array, neither a scalar
- Expected Ptrcv::UMat for argument ‘src’
FWIW, PIL.ImageOps has a grayscale function. It takes an image and returns an image.
Help on function grayscale in module PIL.ImageOps:
Convert the image to grayscale.
:param image: The image to convert.
:return: An image.
It’s not an object interface, but I wouldn’t be surprised if it was wrapped somewhere in an object-oriented API. Figuring that out is left as an exercise for the reader.