2017-12-18 93 views
1

私はイメージ(numpy配列)を文字列に変換しています。次に、この文字列を元の寸法の数の少ない配列に変換します。したがって、両方のnumpy配列は等しいです。numpy.array_equals()は、配列が等しくなるようにTrueを返します。cv2.imshow()黒い画面を表示

cv2.imshow()を元のnumpyアレイに呼び出すと、画像が印刷されます。しかし、新しい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)) 
関連する問題