-
[OpenCV 튜토리얼] 1. OpenCV 영상(이미지) 입출력Python/OpenCV 2019. 6. 17. 14:13SMALL
딥러닝이나 컴퓨터 비전을 공부했던 사람이라면
한 번쯤은 들어보고 사용해봤을 OpenCV에 대한 간단한 튜토리얼과 활용을 포스팅하려 한다.
나의 경우, 딥러닝과 의료 영상에 대한 관심으로 의료 인공 지능을 공부하다가
알게 되었고 개인적으로 다른 라이브러리에 비해 사용이 편리했다.
OpenCV는 Intel(인텔)에서 개발한 컴퓨터비전 라이브러리로
Window(윈도우), Linux(리눅스)에서 사용할 수 있고 Tensorflow(텐서플로우), PyTorch(파이토치) 등
다양한 딥러닝 프레임 워크를 지원한다.
(OpenCV, "위키백과", 2019-06-17, https://ko.wikipedia.org/wiki/OpenCV)
먼저, OpenCV의 영상(이미지) 입, 출력에 대해 알아보도록 한다.
1. OpenCV 영상 입력
1-1 python은 라이브러리를 사용하기 전 모듈을 import(임포트) 해주어야 한다.
(OpenCV의 경우, "cv2"라는 이름으로 임포트 한다.)
1-2 입력 받고자하는 이미지의 경로를 설정해준다.
이 포스팅의 이미지는 내가 키웠던 강아지 애기시절 사진을 이용했다 ㅋㅋ1-3 cv2의 imread함수를 이용해 이미지가 담긴 변수를 불러온다.
cv2.imread(filename [,flags]) -> flags는 이미지의 컬러를 지정할 수 있는 옵션이다.
cv2.IMREAD_COLOR(디폴트) 컬러 영상 출력 cv2.IMREAD_GRAYSCALE 그레이 영상 출력 cv2.IMREAD_UNCHANGED alpha 채널 포함 출력 flags 옵션
flags를 생략하면 일반 디폴트 값인 컬러 영상이 나오고,
0을 입력하면 그레이 영상이 나오며 이는 cv2.IMREAD_GRAYSCALE을 입력하는 것과 같다.
1-4 cv2의 imshow함수를 이용해 윈도우로 이미지를 표시해 준다.
imshow의 첫 파라미터는 윈도우에 나타나는 제목이고,
두 번째 파라미터는 입력받을 이미지파일을 나타낸다.
1-5 cv2의 waitkey 함수로 키보드 입력을 대기시킨 뒤, 키보드가 입력되면
destroyAllWindows 함수로 윈도우(창)을 종료시킨다. (옵션)
(waitkey() 함수는 키보드 입력 전까지 윈도우 창을 계속해서 띄워 놓는다.)
키보드가 눌릴 경우 윈도우는 모두 종료된다.
전체 코드
실행 결과
imread에서 정해준 flag에 따라 디폴트값 컬러가 왼쪽에 나오고 0번을 지정한 그레이 컬러는 오른편에 표시되어 있다.
또한 imshow에서 지정해준 이름(Dalja color, Dalja gray)가 윈도우 창 위의 타이틀로 지정된 것을 확인할 수 있다.
두 영상이 반반 나눠서 윈도우가 켜진 것 같지만 보기 편하게 옆으로 정리한 뒤 캡쳐한 것으로
원래는 두 개의 윈도우가 켜지게 된다.
2. OpenCV 영상 출력
2-1 위의 입력과 마찬가지로 OpenCV를 임포트하고 영상의 경로를 설정해준 뒤 이미지를 읽어온다(imread).
2-2 영상을 출력(저장)하려면 imwrite라는 함수를 사용한다.
cv2.imwrite(filename, img[, params]) -> 첫 파라미터는 저장할 경로와 저장할 파일명을 지정해주고,
두 번째 파라미터에는 저장할 이미지를 넣어준다.
세 번째 파라미터는 옵션으로는 [IMWRITE_JPEG_QUALITY, 90]은
출력할 이미지의 90%의 품질을 같는 JPG로 출력할 때 설정하며,
품질 범위는 0 ~ 100이고 높을수록 품질이 좋다. (디폴트: 3)
[IMWRITE_PNG_COMPRESSION, 9]는 출력 이미지를 압축률 9인
PNG로 저장한다는 의미이다. 압축률의 범위는 0 ~ 9까지이며,
높을수록 시간이 오래 걸린다.
전체 코드
실행 결과
imwrite에서 지정해준 경로인 test_results 폴더에 4가지 사진이 출력된 것을 확인할 수 있다.
OpenCV의 영상은 처음 몇 번만 해보면 익숙하게 할 수 있을 것이다.
위의 방법 뿐만 아니라 경로를 이용해 입력하는 방법도 있으나 기본적인 입출력 예제만 올려보았다.
더 다양한 입출력과 그 옵션들을 확인하고 싶으신 분들은 공식문서를 참고하길 바란다.
[참고 문헌]
1. OpenCV reference
2. 김동근(2018), "Python으로 배우는 Open CV 프로그래밍", 가메출판사
LIST'Python > OpenCV' 카테고리의 다른 글
[OpenCV 튜토리얼] 5. 관심영역 ROI(Region Of Interest) (0) 2020.11.24 [OpenCV 튜토리얼] 4. 마우스 및 트랙바 이벤트 처리 (0) 2020.11.17 [OpenCV 튜토리얼] 3. 도형 그리기 및 문자열 출력하기 (0) 2020.11.17 [OpenCV 튜토리얼] 2. 비디오 캡쳐와 화면 표시 (0) 2019.07.09 댓글