OpenCV - 영상 읽고, 쓰고, 출력하기 기초
파이썬 OpenCV 라이브러리 불러오기
import cv2
import numpy as np
OpenCV 라이브러리는 cv2라는 이름으로 불러올 수 있다. 이미지 행렬 처리가 자주 사용되니 numpy도 미리 같이 불러오자.
영상 생성
numpy를 이용하여 행렬을 만들어서 영상을 생성할 수 있다.
#초기화된 값들로 이루어진 그레이스케일 이미지
np.empty((행[세로길이], 열[가로길이]), dtype=np.uint8)
#0으로만 이루어진 컬러 이미지 (검은색)
np.zeros((행[세로길이], 열[가로길이], 값의 수), dtype=np.uint8)
#255로만 이루어진 그레이스케일 이미지 (흰바탕)
np.ones((행[세로길이], 열[가로길이]), dtype=np.uint8)*255
#노란색(0, 255, 255) 컬러 이미지
np.full((행[세로길이], 열[가로길이], 값의 수), (0, 255, 255), dtype=np.uint8)
영상 읽기
cv2.imread('파일경로', flag)
-
파일경로: 불러올 영상 파일의 경로
-
flag: 영상 파일 불러오기 옵션 플래그; ImreadModes 열거형 상수를 지정하여 영상 파일을 불러올 때 사용할 컬러 모드와 영상 크기를 지정할 수 있다.
ImreadModes 열거형 상수 예
- IMREAD_UNCHANGED: 입력 파일에 지정된 그대로의 컬러 속성을 사용, 알파 채널까지 이용하여 PNG 파일의 투명한 부분까지 4채널 영상으로 불러옴. 상수 -1
- IMREAD_GRAYSCALE: 1채널 그레이스케일 영상으로 변환하여 불러옴. 상수 0
- IMREAD_COLOR: 3채널 BGR 컬러 영상으로 변환하여 불러옴. 상수 1
영상 출력
cv2.imshow(title, img)
- title: 출력될 영상의 제목
- img: 출력할 이미지 값 =numpy로 만든 배열 또는 cv2.imread()의 반환값
cv.waitKey(n)
- 키보드 입력 대기, ‘n’ ms 동안 대기하며 n이 0일 경우에는 무한대기. 입력한 ASCII 키값을 반환한다. 정말로 입력을 받기 위함 보다는 출력된 영상 창을 끄지 않고 유지시키기 위해 사용.
cv2.destroyAllWindows()
- 출력되어 있는 모든 영상 윈도우 창들을 닫음
영상 출력 예시
import cv2
import numpy as np
img1 = np.empty((200, 500), dtype=np.uint8) #그레이스케일 이미지
img2 = np.zeros((200, 300, 3), dtype=np.uint8) #검은색 컬러 이미지
img3 = np.ones((200, 300), dtype=np.uint8)*255 #그레이스케일 이미지. 흰바탕
img4 = np.full((200, 300, 3), (0, 255, 255), dtype=np.uint8) #노란색 컬러 이미지
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
fname = 'b.jpg'
original = cv2.imread(fname, cv2.IMREAD_COLOR)
gray = cv2.imread(fname, cv2.IMREAD_GRAYSCALE)
unchange = cv2.imread(fname, cv2.IMREAD_UNCHANGED)
cv2.imshow('Original', original)
cv2.imshow('Gray', gray)
cv2.imshow('Unchange', unchange)
cv2.waitKey(0)
cv2.destroyAllWindows()
영상 쓰기
cv2.imwrite('파일명', img)
- 파일명 - 현재 경로에 저장 시킬 영상 파일의 이름
- img - 저장할 영상 값 (numpy 배열)
예시)
import cv2
fname_o = 'b.jpg' #오리지널 파일 경로/이름
fname_t = 'b_gray.jpg' #새로 저장할 파일이름
gray = cv2.imread(fname_o, cv2.IMREAD_GRAYSCALE) #그레이스케일로 읽어온 영상 값
cv2.imwrite(fname_t,gray) #불러온 영상을 새로운 영상 파일로 저장
img = cv2.imread(fname_t) #새로 저장한 영상 불러오기
cv2.imshow('image',img) #새 영상 출력
cv2.waitKey(0) #키보드 입력 대기
cv2.destroyAllWindows() #모든 윈도우 창 닫음
댓글남기기