2017-12-19 11 views
2

그래서 저는 포토샵에서 쉽게 할 수 있지만 파이썬 Numpy 라이브러리를 사용하여 500x500의 흰색 이미지를 만들고 싶습니다. 아래 코드는 유효하고 이미지는 흰색입니다 (cv2.imsave 함수를 사용하여 이미지를 저장했기 때문에 나중에 Windows 사진 뷰어로 열었습니다). 하지만 cv2.imshow 함수를 사용하여 표시하려고하면 검은 색 이미지가 표시됩니다. 왜 그런가요? 그것은 cv2의 단점입니까?왜 검은 이미지가 표시됩니까?

import cv2 
import numpy as np 

img = np.arange(500*500*3) 
for i in range(500*500*3): 
    img[i] = 255 
img = img.reshape((500, 500, 3)) 
cv2.imwrite("fff.jpg", img) 
cv2.imshow('', img) 
+2

당신은'int8' 데이터 유형 배열을 표시해야 할 수 있습니다 - 당신의 배열을 초기화하는 경우

cv2.imshow('', img.astype(np.uint8)) 

또는, 그래서 같이하십시오. uint8)'? –

+0

알았어. 세 번째 줄을 수정하고 "dtype = np.uint8"인수를 추가하면 효과가있었습니다. 그것을 찾기가 어렵습니다. 나는 그것을 찾기 위해 몇 시간을 보낸다. – skilledDt

+0

이것이 반복되는 문제라고 생각할 수 있으므로 문서를 찾은 다음 답변에 연결했습니다. –

답변

2

cv2 모듈은 C++ OpenCV 패키지를 둘러싼 씬 래퍼입니다. 여기에 대한 설명서가 있습니다. 그리고 시그니처는 파이썬 래퍼 함수와 인터페이스합니다. 지정된 창에서

void cv::imshow (const String &winname, 
     InputArray  mat 
)   

표시 이미지 - documentation에서.

imshow 함수는 지정된 창에 이미지를 표시합니다. [...]

  • 이미지가 8 비트 서명되지 않은 경우 그대로 표시됩니다.
  • 이미지가 16 비트 부호없는 또는 32 비트 정수인 경우 픽셀을 256으로 나눕니다. 은 값 범위 [0,255 * 256]가 [0,255]에 매핑됩니다.
  • 이미지가 32 비트 부동 소수점이면 픽셀 값에 255가 곱 해집니다. 즉, 값 범위 [0,1]은 [0,255]에 매핑됩니다. 기본적으로

는 NumPy와 배열은 np.int32 또는 np.int64 유형 (이 시스템에 따라 다름)로 초기화된다. 배열을 변경하지 않고 표시하려면 8 비트 부호없이 전달해야합니다. 이 같은 사건에서 -`img.astype (NP -

img = np.arange(..., dtype=np.uint8)