티스토리 뷰

반응형

이번 글은 파이썬을 이용해서 이미지를 다루는 opencv-python 패키지를 간략하게 설명하고자 합니다.

 

우선 아나콘다 가상환경(opencv4)을 생성하기 위해서 다음과 같은 구문을  실행하고 활성화 한다 

$ conda create -n opencv4 python=3.7
$ conda activate opencv4

다음으로 이미지 처리 패키지인 opencv-python를 설치한다.

pip install opencv-python	# opencv 최신 패키지 설치

1) 이미지 읽어오기

 

설치된 python-opencv 패키지를 cv2로 불러온다.

import cv2

 

이미지를 읽어오기 위해서는 cv2의 imread함수를 이용하는데 이미지를 칼러 형태로 불러오기 위해서는 flag 옵션을 1이나 IMREAD_COLOR로 한다. 흑백이미지로 불러오기 위해서는 0이나 IMREAD_GRAYSCALE로 한다. 칼러와 알파채널까지 불러오기 위해서는 -1이나 IMREAD_UNCHANGED로 한다.

cv2.imread함수로 이미지를 불러오면 BGR 순서로 불러오고 파일형식인 넘파이 배열(numpy array) 형식으로 불러오게 된다.

cv2.imread(imgFile, flag)

imgFile : 이미지 파일 경로
flag : 이미지 파일을 읽어올 때 옵션
1 : IMREAD_COLOR : color(BGR)로 읽기, defult값, flag를 생략하면 자동으로 1로 인식
0 : IMREAD_GRAYSCALE : gray-scale로 읽기
-1 : IMREAD_UNCHANGED : color(BGR) + alpha channel 까지 포함하여 읽기

 

2) 이미지 출력하기

이미지를 출력하기 위해서 cv2.imshow()함수를 이용하고 잠시 윈도우 창을 대기 하기 위해서는 cv2.waitKey()함수를 이용하고 종료하기 위해서는 cv2.destroyAllWindows()함수를 이용한다.

 

cv2.imshow('title', img)

title : windows창 이름
img : 이미지 파일

 

cv2.waitKey(time)

키 입력을 대기
time : msec시간 단위, 공란 또는 0일 경우엔 무한정으로 대기

 

cv2.destroyWindows('title')

특정 이미지 창을 닫음
title : windows창 이름

 

cv2.destroyAllWindows()

모든 이미지 창을 닫음

 

에를 들어 이미지를 읽어오고 출력하여 종료하는 일련의 과정은 다음과 같다.

# main.py

import cv2
imageFile = './data/lena.jpg'
 
img = cv2.imread(imageFile)
img2 = cv2.imread(imageFile, 0)
img3 = cv2.imread(imageFile, -1)
 
cv2.imshow('Lena color', img)
cv2.imshow('Lena grayscale', img2)
cv2.imshow('Lena alpha channel',img3)
 
cv2.waitKey(5000)   # 5초 후에 자동 close, 빈 칸이면 아무 키 누르면 close
cv2.destroyAllWindows()

 

3) 이미지 저장하기

이미지 저장은 cv2.imwrite()함수를 이용하고 매개변수로 저장할 파일이름과 저장할 데이터를 입력한다.

cv2.imwrite(dstFile, src)

dstFile : 저장될 파일 경로 + 파일명
src : 원본 이미지 파일

 

# write.py

import cv2
imageFile = './data/lena.jpg'
 
img = cv2.imread(imageFile)
 
cv2.imwrite('./data/Lena.bmp', img)
cv2.imwrite('./data/Lena.png', img)
 
# 0 ~ 9 중의 압축율로 png포맷으로 저장(숫자가 클수록 높은 압축)
cv2.imwrite('./data/Lena2.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 9])
 
# 뒤의 숫자가 (0 ~ 100)작아질수록 파일 크기는 줄고, 화질이 나빠짐. jpg포맷으로 저장
cv2.imwrite('./data/Lena2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 70])
반응형
댓글