2017-12-18 361 views
1

我正在將圖像(numpy數組)轉換爲字符串。然後我將這個字符串轉換回原始維度的一個numpy數組。因此,numpy數組都是相等的 - 事實上,numpy.array_equals()也返回True,以使數組相等。cv2.imshow()給黑屏

當我在原始numpy數組上調用cv2.imshow()時,它會打印圖像。但是當我在新的numpy數組上調用cv2.imshow()時,我只能看到黑屏。

這是怎麼發生的?兩個numpy數組是相等的,所以我應該得到相同的輸出嗎?

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

回答

2

你的數組即你的數組是相等的,但數據類型不是。您的temp陣列屬於int64類型,而imshow預計爲uint8。以下內容將修復您的腳本:

cv2.imshow('l' , np.array(temp, dtype = np.uint8))