cv2.imshow() giving black screen

Question:

I’m converting a image (numpy array) into a string. Then I’m converting this string back to a numpy array of the original dimensions. Hence both the numpy arrays are equal- infact numpy.array_equals() also returns True for the arrays being equal.

When I call cv2.imshow() on the original numpy array, it prints the image. But when I call cv2.imshow() on the new numpy array, I get only a black screen.

Why is this happening? Both the numpy arrays are equal, so I should get the same output right?

import numpy as np
import cv2

frame = cv2.imread( '/home/nirvan/img_two.png' , cv2.IMREAD_GRAYSCALE)
string = ' '.join(map(str,frame.flatten().tolist()))

frameCopy = frame.copy()

x = frame.shape[0]
y = frame.shape[1]

frame = string.strip()
temp = [ int(t) for t in frame.split(' ')]
temp = np.array(temp)
temp = temp.reshape( (x,y) )

print( np.array_equal(frameCopy , temp) )

#gives black screen
cv2.imshow('l' , np.array(temp) )

#gives proper image
#cv2.imshow('l' , np.array(frameCopy) )

cv2.waitKey()
Asked By: Nirvan Anjirbag

||

Answers:

Your arrays i.e. your frames are equal, but the data types are not. Your temp array is of type int64 while imshow expects uint8. The following will fix your script:

cv2.imshow('l' , np.array(temp, dtype = np.uint8 ) )
Answered By: s-m-e
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.