kvyat
kvyat

Reputation: 13

Can't convert black&white image to grayscale in Opencv

I'm new to opencv so don't mind me!

I want to convert an image which is a black and white image to gray scale image and save it by using cv2.imwrite(). The problem is that after I saved it to my local drive and read it back it returned as a 3 channels image. What is the problem here? Here is my code

import cv2

image = cv2.imread("path/to/image/image01.jpg")
print(image.shape) # return (128, 128, 3)

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print(gray_image.shape) # return (128, 128)
cv2.imwrite("path/to/dir/gray01.jpg", gray_image)

new_gray_img = cv2.imread("path/to/dir/gray01.jpg")
print(new_gray_img.shape) # return (128, 128, 3)

here is the image i want to convert to gray.

Upvotes: 1

Views: 590

Answers (2)

Vidya Ganesh
Vidya Ganesh

Reputation: 818

cv2.imread loads images with 3 channels by default

You can replace the last two lines of code using:

new_gray_img = cv2.imread("path/to/dir/gray01.jpg",cv2.CV_LOAD_IMAGE_GRAYSCALE)
print(new_gray_img.shape) 

Another method is to load image with scipy:

from scipy.ndimage import imread
new_gray_image=imread("path/to/dir/gray01.jpg")

Upvotes: 2

Herbz
Herbz

Reputation: 111

Try to read the image directly in grayscale cv2.imread("path/to/dir/gray01.jpg", 0)

import cv2

image = cv2.imread("path/to/image/image01.jpg")
print(image.shape) # return (128, 128, 3)

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print(gray_image.shape) # return (128, 128)
cv2.imwrite("path/to/dir/gray01.jpg", gray_image)

# here is the change
new_gray_img = cv2.imread("path/to/dir/gray01.jpg", 0)
print(new_gray_img.shape) # return (128, 128)

Upvotes: 1

Related Questions