2017-12-18 13 views
1

나는 이미지 (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이고 imshowuint8입니다. 다음 스크립트를 수정합니다 :

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