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()
▼ 소스에서 편집한 이미지를 저장한 결과입니다.
'파이썬 Python' 카테고리의 다른 글
파이썬(Python) PyQt5 QFrame 구현하기 (3) | 2024.09.05 |
---|---|
파이썬(Python) bool 자료형, 참과 거짓(True/False) 판단하기 (0) | 2024.09.05 |
파이썬(Python) print 함수와 문자열 포맷으로 출력하기 (1) | 2024.09.01 |
파이썬(Python) 2진수, 8진수, 10진수, 16진수 변환하기 (1) | 2024.08.29 |
파이썬 Python Flask no module named xxxx 에러 해결하기 (0) | 2024.08.25 |
파이썬(Python) Flask 이미지 서버에 올리기 (0) | 2024.08.25 |
파이썬(Python) 설치 라이브러리 확인하기 (0) | 2024.08.24 |
파이썬(Python) PyQt5 QListWidget 고급, 데이터 옮기기 (0) | 2024.08.24 |