본문 바로가기
오류처리

[python] OpenCV 이미지를 못 찾아오는 오류 , OpenCV 한글경로 오류

by 으노으뇨 2025. 2. 14.
728x90
반응형
SMALL

안녕하세요!

파이썬과 OpenCV라이브러리를 이용해서 이미지 비교하는 프로그램을 간단하게 만들어보고 있었는데

경로를 잘지정해줘도 이미지를 호출하지 못하는 경우가 있었습니다.

우선 사용된 라이브러리는 

import cv2

이미지를 호출하는 코드는

image_path = 'D:/공부/블로그/JS.png'
image = cv2.imread(image_path, cv2.IMREAD_COLOR)

if image is None:
    print("이미지를 불러올 수 없습니다. 경로를 확인해 주세요.")
else:
    cv2.imshow('test', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

이렇게 간단하게 작성해서 동작을 시켜보겠습니다.

그랬더니 아래와 같은 오류가 발생했습니다.

잘보면 D:/ 와 함께 알수없는 글자들로 깨진것들을 볼 수 있습니다.

그래서 계속 검색을 하는동안 설마하는 느낌에 경로를 모두 영문으로 변경하고 코드도 

기존의 D:공부/블로그 에서 D:study/blog 이렇게 변경했습니다.

바로 한글이 깨지면서 한글 경로를 못찾아서 발생했던 간단한(?) 오류였습니다.

이런 간단한 오류 하나로도 몇 분정도 소요되었는데요.. 참 난감했죠 분명 정상적으로 다른 폴더경로는 잘읽는데 왜 얘는 못읽지... 등등등

그럼 어쩔 수 없이 한글이 들어간 경로를 써야한다면 어떻게 해야할까?

cv2.imread 함수는 한글 경로를 제대로 처리하지 못할 수 있습니다. 이를 우회하기 위해 파일을 직접 열어 바이너리 데이터를 읽어와 numpy 배열로 변환한 후, cv2.imdecode를 사용하여 이미지를 디코딩합니다.

How ?

1. 라이브러리 임포트

import cv2
import os
import numpy as np

OpenCV(cv2), OS 모듈(os), 그리고 NumPy(numpy)를 임포트합니다. OpenCV는 컴퓨터 비전 작업에 사용되며, NumPy는 배열 작업에 사용됩니다.

2. 이미지 경로 설정(한글 경로)과 파일 열기 및 읽기 동시 진행

image_path = 'D:/공부/블로그/JS.png'
with open(image_path, 'rb') as file:
    image = np.frombuffer(file.read(), dtype=np.uint8)
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)

이미지 파일을 바이너리 읽기 모드('rb')로 열고, 파일 내용을 읽어 numpy 배열로 변환합니다. np.frombuffer는 파일의 바이너리 데이터를 numpy 배열로 변환합니다.

3. 이미지 디코딩 (이때 cv2.imdecode) 함수사용

image = cv2.imdecode(image, cv2.IMREAD_COLOR)

cv2.imdecode 함수는 numpy 배열로 변환된 이미지를 디코딩하여 OpenCV 이미지 형식으로 변환합니다. cv2.IMREAD_COLOR는 이미지를 컬러로 읽어옵니다.

4. 확인을 위한 이미지 로드

if image is None:
    print("이미지를 불러올 수 없습니다. 경로를 확인해 주세요.")
else:
    cv2.imshow('test', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

이미지가 제대로 불러와졌는지 확인하고, 불러오지 못한 경우 경로를 확인하라는 메시지를 출력합니다. 이미지를 성공적으로 불러왔을 경우, cv2.imshow로 이미지를 화면에 표시하고, cv2.waitKey(0)으로 키 입력을 대기한 후, cv2.destroyAllWindows로 모든 창을 닫습니다.

그럼 이렇게 이미지가 한글 경로임에도 불구하고 정상적으로 출력되는것을 볼 수 있습니다.

728x90
반응형
LIST

댓글