Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Deep Learning/[Books] 머신러닝, 딥러닝 실전 앱 개발

OpenCV 라이브러리 사용해보기(resize함수)

Kellyyyy 2020. 5. 18. 08:00

 

딥러닝은 주로 이미지, 음성, 텍스트에 관련된 문제를 해결하는데 사용한다.

이번 포스팅에서는 이미지를 다루는 데 필요한 라이브러리인 'OpenCV'를 다룬다.

 

OpenCV란 ?

 

OpenCV는 Open Source Computer Vision Library의 줄임말로,

오픈소스 이미지(동영상) 라이브러리를 뜻한다.

 

인텔이 만들어 공개했다.

 

이미지 형식 변환, 필터처리 같은 간단한 처리부터

얼굴/물체/문자인식 등 다양하게 활용 가능하다.

 

동작하는 OS는 안드로이드, 리눅스, 윈도우 등 다양하다.

 

딥러닝에서는 이미지를 입력으로 전달하기 위해서

이미지를 숫자 데이터로 변환해야한다.

 

그런데 실제 이미지파일은 BMP, PNG, JPEG 등 다양한 형식일 수 있고

흑백일 수도 있고, 크기도 제각각이다.

 

그래서 이미지 형식 가공이나 색상변환, 크기 변환 작업이 필요한데

]이때 OpenCV를 활용할 수 있다.

 

아래 사이트에 들어가면 좀 더 자세한 정보를 알 수 있다.

http://opencv.org 

 

OpenCV

This summer, OpenCV celebrates its 20th anniversary. We want to expand another area of our activity

opencv.org

 

OpenCV 세팅하기

 

OpenCV를 Jupyter notebook에서 사용하기 위해서는 Tensorflow처럼 패키지를 설치해야한다.

우선 anaconda prompt를 실행해보자.

 

우선 pip버전을 업그레이드 해야한다.

pip.exe 파일이 있는 폴더로 위치를 변경하고 아래 명령어로 pip 버전을 올린다.

 

 

> python -m pip install --upgrade pip

 

 

업그레이드가 완료되면 OpenCV를 설치한다.

 

 

> pip install opencv-python

 

 

설치가 끝났다면 OpenCV를 import해서 제대로 설치됐는지 확인한다.

 

 

위 명령어를 실행했을 때 별다른 에러로그가 뜨지 않으면 성공적으로 설치가 끝난 것이다.

 

 

OpenCV 활용하기

 

간단한 실습 3가지를 해볼 것이다.

 

1. 이미지 읽어들이기, 출력하기

 

imread()를 사용하여 읽어들인다.

 

 

이미지를 print()로 출력하면 위와 같이 배열형태로 출력된다.

이미지 형태로 출력하기 위해서는 matplotlib 패키지를 사용하면 된다.

imshow()를 사용하여 출력했다.

 

 

그런데 사진을 보면 색이 원본과 다르다는 것을 알 수 있다.

 

2. 색공간 변환하기

 

이는 OpenCV의 컬러데이터는 BGR(파란색, 녹색, 빨간색) 순서로 되어있고,

matplotlib의 컬러 데이터는 RGB(빨간색, 녹색, 파란색) 순서로 되어있기 때문이다. 

 

RGB로 바꿔주기 위해서는 색공간 변환 작업을 해주어야하는데, cvtColor() 함수를 사용하면 된다.

 

 

3. 사이즈 변경

 

이미지 사이즈 변경은 resize() 함수를 사용한다.

 

cv2.resize(이미지변수, (가로 픽셀 수, 세로 픽셀 수)) 순서로 지정하면 된다.

나는 가로 세로를 32 픽셀로 축소해보겠다. 

 

 

resize함수를 사용하면서 몇가지 배운점이 있다.

 

첫째로, resize라고 해서 뭔가 출력되는 이미지의 크기가 변할 것 같지만,

사실은 이미지의 실제 크기가 변경되는 것이 아니라 픽셀수가 변경되는 것이라는 점이다.

 

그래서 픽셀수를 줄이면 그만큼 파일을 손상한 것이기 때문에,

다시 늘린다고 해서 원본의 해상도로 돌릴 수 없다.

 

원본의 해상도를 갖기 위해서는 다시 파일을 로드해야한다.

가로, 세로를 각각 2000픽셀로 늘린 결과이다.

 

픽셀수를 줄였다가 늘린 경우

 

 

두번째로, 픽셀수를 늘린다고 해서 해상도가 좋아지지는 않는다.

 

앞선 이야기와 연결되는 부분인데, 한번 줄였던 이미지 파일의 해상도를 되돌릴 수 없듯,

원본의 해상도를 높일 수는 없다.

 

어찌보면 당연한 것이 jupyter notebook에서 이미지를 업그레이드 시켜줄 수는 없기 때문이다.

 

cat.jpg를 다시 로드한 후에 바로 가로,세로를 2000으로 늘려봤다.

 

 

마지막으로 출력되는 이미지의 물리적인 크기를 줄이거나 늘릴 수 있는 방법

가로, 세로의 비율을 1:1이 아니게 지정했을 경우이다.

 

가로 : 세로 = 1:1이면 항상 위 사진들처럼 일정한 크기로 출력되지만

비율을 다르게 하면 한쪽 변의 크기를 늘리거나 줄일 수 있다.

 

가로 : 세로 = 1:2로 지정해보았다.

 

이렇게 OpenCV에 대해서 알아보았다.

다음 포스팅에서는 저번 포스팅에서 완성했던 모델을 다른 모델로 교체해보록 하겠다.