파이썬 Python

파이썬(Python) OpenCV 파일 읽기와 저장하기

녹두장군1 2024. 8. 28. 23:31
반응형

OpenCV 에서 가장 기본적인 기능인 이미지를 읽고 저장하는 함수에 대해 알아보겠습니다. imread() 함수로 이미지를 읽고, imwrite() 함수를 편집한 이미지를 저장합니다.

 


 

 

1. 이미지 파일 읽기

 

▼ OpenCV 모듈인 cv2 import 문으로 선언합니다. 이미지를 읽기 위한 cv2 모듈의 함수는 cv2.imread(filename, flag) 입니다.

 

cv2.imread(filename, flag)

l  filename : 이미지파일의 경로를 의미한다.

l  flag : 이미지를 어떻게 읽을지 결정하는 옵션

-      cv2.IMREAD_COLOR : Default 설정값으로 컬러 색상을 읽는다.

-      cv2.IMREAD_GRAYSCALE (0) : 명암도 영상인 흑백 이미지로 변환해서 읽는다.

-      cv2.IMREAD_UNCHAGED (-1) : 파일에 지정된 컬러 영상을 읽는다. 투명 정보인 alpha channel 도 읽을 수 있다.

-      cv2.IMREAD_ANYCOLOR (4) : 파일에 정의된 타입으로 읽는다.

l  return : image 객체 행열인 numpy.ndarray 반환 

import cv2

src = cv2.imread('images/bg.jpg', cv2.IMREAD_UNCHANGED)

 

다음은 이미지를 읽은 후 변수에 저장한 반환값이 사용자가 예상한 결과값인지 판단하기 위한 소스입니다. imread() 함수가 읽은 것이 이미지가 아닌 경우 None 을 반환하기 때문에 아래 소스로 오류를 할 수 있습니다. 

if src is None:
    sys.exit("Could not read the image.")

 

이미지를 화면에 보여주는 함수는 cv2.imshow() 입니다.

 

cv2.imshow(window title, image)

l  window title : 이미지를 보여주는 윈도우의 타이틀명

l  image : cv2.imread() 의 반환값으로 numpy.ndarray 배열 객체를 입력

 

▼ imread() 함수로 이미지를 읽은 뒤 numpy.ndarray 이미지 배열 영역을 잘라서 imshow() 로 화면에 보여 줍니다. 

import cv2

src = cv2.imread('images/bg.jpg', cv2.IMREAD_UNCHANGED)

if src is None:
    sys.exit("Could not read the image.")
 
# 이미지를 자르고 크기를 구한다.
roi = src[100:600, 200:400]
 
# 결과를 출력한다.
cv2.imshow('cut image', roi)

 

▼ imread() 함수로 이미지를 읽어올 때 사용한 flag 의 종류에 따른 결과값은 다음과 같습니다. 


 

 

2. 이미지 파일 저장하기

 

편집한 이미지나 동영상의 특정 프레임을 캡처해서 저장하고 싶을 때 cv2.imwrite() 함수를 사용합니다.

 

cv2.imwrite(filename, image)

l  filename : 저장할 이미지의 파일 제목

l  image : 이미지 객체 

# 결과값을 저장한다
cv2.imwrite('save_image.jpg', src)

 

전체 소스는 다음과 같습니다. 

import cv2
import sys

src = cv2.imread('images/bg.jpg', cv2.IMREAD_UNCHANGED)

if src is None:
    sys.exit("Could not read the image.")

# 이미지를 자르고 크기를 구한다.
roi = src[100:600, 200:400]
width, height, channel = roi.shape
print(width, height, channel)

# 자른 이미지를 소스 이미지에 붙인다.
src[0:width, 0:height] = roi

# 결과를 출력한다.
cv2.imshow('source', src)

# 결과값을 저장한다
cv2.imwrite('save_image.jpg', src)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

소스에서 편집한 이미지를 저장한 결과입니다.


 

 

반응형