경로에 중국어가 포함된 이미지는 cv2.imread로 직접 읽으면 에러가 난다. 둘 사이의 사용법과 차이점을 기록합니다.
목차
1. 이미지를 읽는 두 가지 방법 비교
- cv2.imread는 이미지를 정상적으로 읽습니다.
import cv2
path = '/data/北京/beijing.png'
img = cv2.imread(path)
위의 코드를 실행하면 오류가 보고됩니다!
- cv2.imdecode는 메모리에서 이미지를 읽습니다.
import cv2
path = '/data/北京/beijing.png'
arr = np.fromfile(path, dtype=np.uint8)
img = cv2.imdecode(arr, flags=cv2.IMREAD_COLOR)
위 코드를 실행하면 성공!
그리고 imdecode로 얻은 이미지 밴드의 순서는 BGR이 아닌 RGB로 opencv와 다른 점이다.
기능 설명:
np.decode는 메모리의 버퍼에서 이미지를 읽습니다.
np.fromfile은 텍스트 또는 이진 파일의 데이터를 배열로 구성합니다.
2. 두 가지 이미지 저장 방법 비교
- cv2.imwrite는 이미지를 정상적으로 읽습니다.
import cv2
out_path = '/data/北京/beijing.png'
cv2.imwrite(out_path,img)
위의 코드를 실행하면 오류가 보고됩니다!
- cv2.imdecode는 메모리에서 이미지를 읽습니다.
import cv2
out_path = '/data/北京/beijing.png'
arr = cv2.imencode('png',img)
out[1].tofile(out_path)
위 코드를 실행하면 성공!
기능 설명:
cv2.encode는 이미지를 메모리 버퍼로 인코딩합니다.
np.tofile은 배열의 데이터를 이진 형식의 파일에 씁니다.