개발 관련 이야기
Base64 string -> cv2 이미지 변환
꿈틀쓰
2022. 9. 3. 12:58
base64로 인코딩된 이미지를 cv2이 읽을 수 있는 형식으로 변환해서 화면에 출력할 일이 있었다.
input은 base64형식으로 인코딩된 문자열(str)이다.
ex. "image/jpeg;base64,/9j/4AAQSkZJ...."
변환 파이프라인은 이렇다.
base64 str -> binary data -> numpy array -> cv2 array
@staticmethod
def base64_to_nparr(base64str):
bin_buffer = base64.b64decode(base64str.split(',')[1]) # base64 string -> binary data
np_arr = np.frombuffer(bin_buffer, dtype=np.uint8) # binary data -> numpy array
return cv2.imdecode(np_arr, cv2.IMREAD_ANYCOLOR) # numpy array -> cv2 array
1줄
여기서 base64str이 image/jpeg;base64, 로 시작하지 않는다면 split할 필요 없다는 것을 주의
2줄
numpy의 frombuffer 함수를 사용하여 binary에서 numpy로 변환한다. 여기서 dtype은 색깔의 범위가 0~255이기 때문에 unsigned int 8bit로 지정한다.
3줄
cv2의 imdecode 함수를 사용하여 numpy array에서 cv2가 이해할 수 있는 컬러 이미지로 디코딩한다. 여기서 리턴되는 결과로 cv2.imshow를 하여 제대로 출력된다면 성공!