cv2.imread 한글 경로 인식 문제 해결법
opencv 라이브러리의 cv2.imread 함수를 사용할 때 이미지 파일의 경로에 한글이 있는 경우에 제대로 읽어내지 못합니다. 다음 코드를 실행하면 에러가 뜹니다.
1
2
3
4
5
6
7
8
9
10
11
|
import cv2
path = 'D:/티스토리/티스토리 포스팅/python/cv2.imread 한글 파일 경로 인식 실패 문제 해결 방법'
img_name = '교훈.jpg'
full_path = path + '/' +img_name
img = cv2.imread(full_path, cv2.IMREAD_COLOR)
cv2.imshow('이미지', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
|
cs |
imshow 부분에서 뭔가 에러가 났다고 하는데, 근본적인 원인은 imread가 잘 안되었기 때문입니다. 다음과 같이 이미지의 Type이 NoneType인 상태입니다. 한글 경로로 인해 흔히 발생하는 문제입니다.
이 문제를 해결하기 위해서는 위 코드를 다음과 같이 변경해주면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import cv2
import numpy as np
path = 'D:/티스토리/티스토리 포스팅/python/cv2.imread 한글 파일 경로 인식 실패 문제 해결 방법'
img_name = '교훈.jpg'
full_path = path + '/' +img_name
img_array = np.fromfile(full_path, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
cv2.imshow('test', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
|
cs |
위 코드를 간략히 설명하자면, 이미지를 cv2.imread로 바로 읽는 대신 np.fromfile 함수를 이용해서 바이너리 데이터를 넘파이 행렬로 읽습니다. 그 다음에 cv2.imdecode 함수로 복호화해줌을 통해 opencv에서 사용할 수 있는 형태로 바꿔줍니다.
변경된 코드를 실행하면 이미지를 잘 읽어내서 잘 보여줍니다.
cv2.imwrite 한글 경로 인식 문제 해결법
imread로 읽는 것도 문제지만, imwrite로 쓸 때도 한글이 포함된 경로라면 문제를 일으킵니다. 다음 코드를 실행하면 에러 메시지는 뜨지 않지만, 해당 폴더에 "교훈_그레이스케일.jpg"라는 이미지 파일이 저장되어 있지 않습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import cv2
import numpy as np
path = 'D:/티스토리/티스토리 포스팅/python/cv2.imread 한글 파일 경로 인식 실패 문제 해결 방법'
img_name = '교훈.jpg'
full_path = path + '/' +img_name
img_array = np.fromfile(full_path, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite('./교훈_그레이스케일.jpg', grayscale_img)
|
cs |
이것 역시 코드의 수정이 필요합니다. 아까는 디코딩이 필요했다면, 이번에는 인코딩이 필요합니다. 인코딩한 것을 바이너리 파일로 써줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import cv2
import numpy as np
import os
path = 'D:/티스토리/티스토리 포스팅/python/cv2.imread 한글 파일 경로 인식 실패 문제 해결 방법'
img_name = '교훈.jpg'
full_path = path + '/' +img_name
img_array = np.fromfile(full_path, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
grayscale_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
new_img_name = '교훈_그레이스케일.jpg'
extension = os.path.splitext(new_img_name)[1] # 이미지 확장자
result, encoded_img = cv2.imencode(extension, grayscale_img)
if result:
with open(new_img_name, mode='w+b') as f:
encoded_img.tofile(f)
|
cs |
이 코드를 실행하면 다음과 같이 이미지 파일명을 한글로 했음에도 이미지가 잘 저장된 것을 확인하실 수 있습니다.
'Dev > python' 카테고리의 다른 글
[ubuntu+python] 특정 사람의 얼굴만 검출하기(face_recognition+dlib+GPU) (9) | 2021.01.26 |
---|---|
[ubuntu+python] 얼굴 인식하기 (face_recognition 라이브러리 설치부터 사용까지) (3) | 2021.01.19 |
[Anaconda+python] 아나콘다 스파이더에서 반복되는 변수명 한번에 다른 것으로 바꾸려면, Ctrl + R (2) | 2021.01.11 |
[python] 해당 경로가 디렉토리인지 파일인지 확인하는 방법 (0) | 2021.01.09 |
[python] 어떤 디렉토리 내에 존재하는 모든 이미지 파일들의 경로 리스트 만들기 (0) | 2021.01.08 |
[python] 쉽고 간단하게 마스크 착용 유무 판별기 만들기 (106) | 2021.01.07 |
[python] 랜덤 비밀번호 생성하기 (6) | 2021.01.06 |
[python] 이번 달의 첫 시간과 마지막 시간을 알고 싶다면? 2021-01-01 00:00:00 과 2021-01-31 23:59:59 (2) | 2021.01.05 |