속도 < 방향

[OpenCV] OpenCV 기초 사용법 및 이미지 읽기, 쓰기 본문

카테고리 없음

[OpenCV] OpenCV 기초 사용법 및 이미지 읽기, 쓰기

import max 2021. 8. 10. 21:58

<OpenCV란?>

Open Source Computer Vision Library의 약자로, 실시간 컴퓨터 비전을 목적으로 한 오픈소스 컴퓨터 비전 및 머신러닝 라이브러리이다.

C#, C/C++/, Python, Java, Ruby 등 다양한 언어를 지원하고 있다. Windows,iOS, Android, Linux 등 다양한 OS플랫폼을 지원한다.

보통 OpenCV를 구동하는 IDLE은 개인의 편의에 따라 다르지만, 대부분 스크립트 언어인 파이썬을 많이 활용하고 있다. 파이썬으로 OpenCV를 사용하는 법은 다양한데, 바로 결과를 확인할 수 있는 jupyter notebook을 많이 사용하는 편이다.

 

OpenCV 메뉴얼이다. 

https://docs.opencv.org/4.5.2/d9/df8/tutorial_root.html

 

OpenCV: OpenCV Tutorials

OpenCV  4.5.2 Open Source Computer Vision

docs.opencv.org

 

 

윈도우에서 cmd실행 창이나 파이참에서 사용을 한다면 해당 문구를 통해 opencv-python을 설치한 후 사용할 수 있다.

pip install opencv-python

 

 

<사용법>

jupyter notebook이나 파이참, 파이썬IDLE를 통해 OpenCV를 실행하고자 한다면, 간단히 라이브러리를 import해서 사용할 수 있다.

 

import cv2
import sys
import random
import numpy as np
import matplotlib as plot

 

내가 자주 사용하는 import 라이브러리 목록인데, numpy 뒤에 as np를 붙인건 해당 라이브러리를 쓸 때마다 단어를 쓰기엔 너무 길기 때문에 내가 이해할 수 있을 짧은 이름인 np로 지정해서 부르겠다는 뜻이다. 

 

OpenCV 모듈을 불러오기 위해서 cv2 를 import 해야 한다.

import cv2

 

<이미지 읽기>

파일(이미지파일) 을 읽기 위해선 imread 함수를 사용해야 한다.

img = cv2.imread('img/flower.jpg', cv2.IMREAD_COLOR)

imread 함수는 말그대로 image를 가져와서 read 한 뒤 객체를 리턴하는 함수이다. 첫번째 인자로는 불러오고 싶은 파일의 로컬을, 두번째 인자로는 파일을 읽어 오는 방식을 입력하면 된다. 이 방식을 보통 flag라고 많이 부른다.

 

이미지 파일을 읽어오는 방식은 여러가지가 있다.

cv2.IMREAD_COLOR	: 디폴트 플래그. 컬러 이미지로 로드한다. 투명한 부분은 무시된다. 정수값 -1로 대체 사용이 가능하다.
cv2.IMREAD_GRAYSCALE	: 흑백 이미지로 로드한다. 실제 이미지 처리 시 중간단계로 사용된다. 정수값 0로 대체 사용이 가능하다.
cv2.IMREAD_UNCHANGED 	: 원본을 사용하여 이미지 그대로 로드한다. 정수값 1로 대체 사용이 가능하다.
cv2.IMREAD_ANYCOLOR 	: 색상 이미지로 로드한다.
cv2.IMREAD_ANYDEPTH 	: 정밀도를 변경하여 로드한다.
cv2.IMREAD_REDUCED_GRAYSCALE_4 : 크기를 1/4로 축소하고, 그레이스케일(흑백)을 적용하여 로드한다.
cv2.IMREAD_REDUCED_COLOR_8 : 크기를 1/8로 축소하고, 칼라스케일(칼라)을 적용하여 로드한다.

 

 

읽은 이미지를 보고 싶다면 imshow 함수를 사용해야 한다.

cv2.imshow('apple',img)

imshow 함수는 image를 가져와서 read 한 뒤 객체를 리턴하는 함수이다. 첫번째 인자로는 이미지가 표시될 창의 타이틀 이름을, 두번째 인자로는 읽어올 이미지의 객체명을 입력하면 된다. 

 

보통 이미지를 읽을 때는 waitKey 함수와 destroyAllWindows 함수도 함께 사용되는 편이다.

cv2.waitKey()

waitKey() 함수는 화면에 이미지를 표시한 후 사용자의 키보드 입력을 기다리는 함수이다. waitKey()안의 인자로 키보드입력을 특정 대기시간을 입력할 수 있고 단위는 1/1000초(ms)이다. cv2.waitKey(10)은 10ms초 동안 대기하라는 의미이고, cv2.waitKey(0) 은 키보드 입력이 있을 때까지 무한대기 상태이다.

만약 waitKey() 함수를 사용하지 않는다면, 윈도우 창은 유지되지 않고 프로그램이 종료된다.

 

윈도우를 종료하는 함수는 destoryAllWindows 함수이다.

cv2.destoryAllWindows()

destoryAllWindows() 함수는 화면에 나타난 모든 윈도우 창을 제거하는 함수이다. waitKey 함수와 같이 사용한다면, 사용자의 입력을 대기하다가 키를 입력받은 뒤 바로 윈도우 창이 사라지는 것을 확인할 수 있다.

 

 

++ 추가적으로 이미지를 쓰는 함수는 imwrite 함수이다.

cv2.imwrite('flower1.jpg', img)

image를 쓰는(write) 함수이다. 첫 번째 인자로는 저장할 파일명, 두 번째 인자로는 이미지 객체를 입력하면 된다.

 

 

 

 

<실행>

import cv2

img = cv2.imread('img/flo.jpg', cv2.IMREAD_COLOR)
cv2.imshow('Flowers', img)

cv2.waitKey(0)
cv2.destoryAllWindows()

위와 같이 img 디렉토리에 있는 flo라는 파일을 칼라로 읽어서 로드한 다음 출력하였다.