I have the following code:
import tensorflow as tf from matplotlib import pyplot as plt def load(im1, im2): ima1 = tf.io.read_file(im1) ima1 = tf.image.decode_image(ima1) ima1 = tf.cast(ima1, tf.float32) ima2 = tf.io.read_file(im2) ima2 = tf.image.decode_image(ima2) ima2 = tf.cast(ima2, tf.float32) return ima1, ima2 inp, re = load(r"RAWs/1313 (1).jpg", r"Clean/1313 (1).png") plt.figure() plt.imshow(inp) plt.figure() plt.imshow(re) plt.show()
Everything works fine, no errors, except that the second image
re is greenshifted (right-most image below):
I have the latest version of tensorflow-cpu as I don’t have a GPU due to current shortage, Python 3.9 64 Bit.
Does someone know why this is happening and how to resolve it?
It’s not a colour image, it’s a single-channel greyscale image. You are looking at false colour, sometimes called pseudocolour. The
imshow() function is mapping the numbers in the array to the colours in the
Colour images have 3 channels (or 4, if they have opacity too). So a NumPy array of a colour image will have shape like
(h, w, 3) or
(h, w, 4). This one has a single channel (shape like
(h, w)). To put it another way, it’s a greyscale image.
If you plot this array with
plt.imshow(img, cmap='gray') it will display how you’re expecting. This scheme maps zeros (or whatever the lowest number is) to black and ones (or the highest value) to white. (See all
maplotlib‘s colourmaps here.)
Answered By – kwinkunks