OpenCV - 영상 읽고, 쓰고, 출력하기 기초

1 분 소요

파이썬 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()  #모든 윈도우 창 닫음

댓글남기기