cv2.imshow() giving black screen

15,773

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 ) )
Share:
15,773
Nirvan Anjirbag
Author by

Nirvan Anjirbag

Updated on August 07, 2022

Comments

  • Nirvan Anjirbag
    Nirvan Anjirbag over 1 year

    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()