OpenCV/OpenCV 강좌

OpenCV 강좌 2 - 영상 입출력과 Display

KALILIVE 2020. 9. 10. 08:26
반응형

이전까지 OpenCV를 설치하는 과정까지 진행하였습니다. 오늘은 OpenCV를 활용하여

이미지, 동영상을 불러오고 컴퓨터에서 화면을 띄우는 과정까지 진행하도록 하겠습니다.

함수 설명 출력
cv2.imread(filename, flags) 영상파일(BMP,JPEG,PNG,TIFF 등)을
numpy.ndarray의 배열로
읽어 반환한다.
retval
cv2.imwrite(filename,img) numpy.ndaaray의 배열 img를 filename의 영상파일로 저장 retval
cv2.namedWindow(winname,flag) winname을 갖는 윈도우를 생성한다. X
cv2.imshow(winname, img) img를 winname에 표시한다. X
cv2.witKey(delay) delay만큼(단위 : ms) 키보드 입력을
대기합니다.
retval
cv2.destroyWindow(winname) winname을 가진 윈도우를 종료합니다. X
cv2.destoryAllWindows() 모든 윈도우를 종료합니다. X

※ 출력 값이 None이거나 큰 의미가 없는 경우 X라고 표시했습니다.

  • filename : 파일의 경로
  • flags : 함수 옵션
  • retval : 리턴 값
  • winname : 윈도우창 이름

각 함수의 flags 종류

  • cv2.imread() : cv2.IMREAD_COLOR - 기본, cv2.IMREAD_GRAYSCALE ,cv2.IMREAD_UNCHANGED - 알파 채널 포함
  • cv2.namedWindow() : cv2.WINDOW_AUTOSIZE - 기본, 크기 고정, cv2.WINDOW_NORMAL

cv2.waitKey()

이 함수는 자주 사용되기 때문에 주요한 기능을 설명하도록 하겠습니다.

delay값으로 밀리초(milli second)만큼 대기합니다. 단 delay 값이 0이면 키보드 입력이 있을 때까지 무한 대기합니다.

retval은 키보드에서 누른 키에 대한 코드를 반환합니다. 지정된 시간까지 키를 누르지 않으면 -1을 반환합니다.

자주 사용되는 ESC값은 27 임을 참고하시면 좋을 것 같습니다.

 

예제

이제 부터 위의 함수들을 이용한 예시들을 살펴보고 감을 익히도록 하겠습니다.

#opencv 모듈 불러오기
import cv2

pimg = "./data/lena.jpg"#이미지 파일 경로
img = cv2.imread(pimg)#이미지 파일을 numpy배열로 저장,cv2.imread(pimg,cv2.IMREAD_COLOR) 과 같다.
#numpy.ndarray형식으로 512x512 크기이미지에 3채널(컬러) 영상이다.
#영상의 채널 순서는 BGR 순서이다.

img2= cv2.imread(pimg,0)#pimg경로의 파일을 1채널인 그레이스케일로 저장한다. 
#cv2.imread(pimg,cv2.IMREAD_GRAYSCALE) 과 동일

cv2.imshow("Lena color",img) #img를 출력
cv2.imshow("Lena Garyscale",img2) #img2 를 출력

cv2.waitKey()
cv2.destroyAllWindows()
#delay가 0 이므로 무한 대기함 만약 키를 입력하면 다음단계인 위도우를 파괴함.

Lenna image(레나 이미지)

저는 테스트에서 Lenna라는 이미지를 사용하였는데요 중요하지 않지만 앞으로 영상처리를 진행하면서

자주 사용하니 왜 이미지를 사용하는지 궁금하신 분은 아래 위키백과 링크를 참조하시면 좋을 것 같습니다.

(이 정도는 기본지식이라고 생각합니다.)

https://ko.wikipedia.org/wiki/%EB%A0%88%EB%82%98_(%EC%9D%B4%EB%AF%B8%EC%A7%80)

 

레나 (이미지) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 레나(Lenna 또는 Lena)는 플레이보이 잡지 1972년 11월자의 센터폴드에 실린 스웨덴의 모델인 레나 포르센(1951년 3월 31일 - )의 사진의 일부분을 말한다. 얼굴과 어깨

ko.wikipedia.org

저는 Test란 풀더에 main.py 가 있으므로 data풀더를 생성하고 사진데이터를 저장했습니다.

이제 아무 사진 데이터나 main.py(실행파일)\data\Lenna.png 경로에 사진을 저장하고 코드를 실행해 봅시다.

실행화면 그레이스케일 이미지 img2 (왼) 컬러 이미지 img (오)

직접 코드를 실행하면서 이게 어떤 역할을 하는지 잘 아시겠죠?

 

공부를 하면서 이게 무슨 함수인지 말로 설명하는 것보다 실제로 코드를 실행해보면서

아 이런 역할을 하는구나 하고 배우는 게 가장 효과적인 학습이라고 생각합니다. 

 

영상을 저장하자

OpenCV2는 영상을 저장하는 함수로 cv2.imwrite(filename,img,params) 형태로 작동합니다

params는 없어도 작동합니다. 앞으로 우리가 img를 여러 형태로 변형하고

저장할 때 사용하기 때문에 매우 많이 자주 사용합니다.

 

import cv2

pimg = ".\data\Lenna.png"
img = cv2.imread(pimg)

cv2.imwrite("Lenna.bmp",img)
cv2.imwrite("Lenna.jpg",img)

cv2.imwrite("Lenna_C.png",img,[cv2.IMWRITE_PNG_COMPRESSION,9])# png파일로 압축률이 9로 저장한다.
cv2.imwrite("Lenna_Q.jpg",img,[cv2.IMWRITE_JPEG_QUALITY,90]) #JPEG영상으로 90%품질을 갖게 저장한다.

cv2.IMWRITE_PNG_COMPRESSION : img를 png형식으로 압축하여 저장하는 옵션입니다. 

압축률의 범위는 0~9이며 압축률이 높을수록 저장 시간이 오래 걸립니다. Default는 3입니다.

 

cv2.IMWRITE_JPEG_QUALITY : img를 jpeg형식으로 품질을 조정하여 저장하는 옵션입니다.

품질의 범위는 0~100이며 높을수록 영상의 품질이 좋습니다. Default는 95%입니다.

 

실행후 생성된 이미지들을 확인할 수 있다.

실행하면 실행파일이 있는 위치에 저희가 생성한 파일을 확인할 수 있습니다.

 

또한 저희가 설정한 옵션을 확인할 수 있는데요

Lenna.jpg와 Lenna_Q.jpg가 동일한 jpeg형식이므로 둘을 비교해봅시다.

 

두 사진의 파일 크기를 비교해 봅시다.

저희가 Lenna_Q.jpg 파일은 옵션으로 품질을 90% 만 반영했기 때문에 원본에 비해 파일 크기가 작아진 것을

확인할 수 있습니다.

 

그 외에 다양한 옵션이 있지만 나중에 강의에서 사용하거나 요청이 많으면 따로 카테고리를 만들어

옵션별로 정리하도록 하겠습니다. 수고하셨습니다.

반응형