이전까지 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라는 이미지를 사용하였는데요 중요하지 않지만 앞으로 영상처리를 진행하면서
자주 사용하니 왜 이미지를 사용하는지 궁금하신 분은 아래 위키백과 링크를 참조하시면 좋을 것 같습니다.
(이 정도는 기본지식이라고 생각합니다.)
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

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

직접 코드를 실행하면서 이게 어떤 역할을 하는지 잘 아시겠죠?
공부를 하면서 이게 무슨 함수인지 말로 설명하는 것보다 실제로 코드를 실행해보면서
아 이런 역할을 하는구나 하고 배우는 게 가장 효과적인 학습이라고 생각합니다.
영상을 저장하자
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% 만 반영했기 때문에 원본에 비해 파일 크기가 작아진 것을
확인할 수 있습니다.
그 외에 다양한 옵션이 있지만 나중에 강의에서 사용하거나 요청이 많으면 따로 카테고리를 만들어
옵션별로 정리하도록 하겠습니다. 수고하셨습니다.
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV 강좌 5 - 문자를 출력하자~ (0) | 2020.10.04 |
---|---|
OpenCV 강좌 4 - 도형을 그리자. (0) | 2020.10.03 |
OpenCV2 강좌 3 - 비디오 프레임 캡처 및 표시 (0) | 2020.09.11 |
OpenCV 강좌 1 - Pycharm에서 OpenCV를 사용하자. (0) | 2020.09.09 |
OpenCV 강좌 0 - 강좌에 앞서 (0) | 2020.09.09 |