요즘 opencv를 주말마다 공부하고 있는데 내용을 정리 차원에서 포스팅 하겠습니다.
opencv 설치는 다른 포스팅에서 다룬적 있으니 참고해주세요 :)
시작하겠습니다.
이미지까지 통칭해서 '영상'이라고 부르겠습니다.
영상 = 동영상 or 이미지
임을 사전에 정의하고 시작하겠습니다.
1) cv2.imread(filename, flags =None)
- filename: 불러올 영상 파일 이름
- flags : 영상 불러오기 옵션
- 위 메서드의 결과는 numpy.ndarray 로 됩니다.
flags 의 옵션은 아래와 같습니다.
함수 | 설명 |
cv2.IMREAD_COLOR | BGR 컬러 영상으로 읽기 (defalut) |
cv2.IMREAD_GRAYSCALE | 그레이스케일 영상으로 읽기 |
cv2.IMREAD_UNCHANGED | 영상 파일 속성 그대로 읽기 |
자, 이제 코드의 일부를 먼저 보겠습니다.
원하는 디렉토리와 이미지를 다운로드 받고 os 라이브러리로 경로를 잡아주세요!
# -*- coding: utf-8 -*-
import sys
import os
import cv2
import numpy as np
import matplotlib.pylab as plt
path = os.path.join('0704', '서예지님1.jpg')
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
if img is None:
print('Image load failed')
sys.exit()
cv2.namedWindow('image1', cv2.WINDOW_NORMAL)
cv2.moveWindow('image1', 200, 200)
cv2.resizeWindow('iamge1', 700, 900)
cv2.imshow('image1', img)
우선, 원본 이미지를 그레이스케일링 하였구요. 혹시라도 img 가 None 일 때 에러 메시지가 뜨게금 되어 있습니다.
2) cv2.namedWindow('model', cv2.WINDOW_NORMAL)
함수가 cv2.imshow() 함수 호출 이전에 사용된 namedWindow 함수가 보이나요?
이 함수는 이미지 창을 생성해주는 함수입니다.
이 함수의 첫번째 인자는 생성될 이미지 표시 윈도우(=팝업창)의 타이틀, 두번째 인자는 윈도우 사이즈 플래그입니다.
옵션 | 설명 |
cv2.WINDOW_AUTOSIZE | 원본 이미지 크기로 고정하여 윈도우를 생성함 |
cv2.WINDOW_NORMAL | 원본 이미지 크기로 윈도우를 생성하여 이미지를 나타내지만 사용자가 크기를 조절할 수 있는 윈도우를 생성함 |
여기서 주의할 부분은
cv2.namedWindow()에서 지정한 윈도우 타이틀과 cv2.imshow() 함수에서 지정한 윈도우 타이틀이 같아야 합니다.
3) cv2.moveWindow(filename, x, y)
- 모니터를 중심으로 x와 y 좌표를 가지고 창의 위치를 설정합니다.
4) cv2. resizeWindow(filename, width, height) -> None
창의 크기를 조절해줍니다. 비율에 맞춰서 수정됩니다.
5) cv2.imshow(winname,mat)
- winname: 영상을 출력할 윈도우의 이름 (=파일 이름 아닙니다. 파일 띄워주는 창을 말해요)
- mat: 출력할 영상(type : numpy.ndarray)
- cv2.waitKey() 함수를 호출해야 화면이 영상에 나타납니다.
- winname 의 윈도우가 없으면 새로 만들어서 영상을 출력합니다.
6) cv2.waitKey(delay=None) -> retval
6-1) dealy
ms(밀리세컨즈) 단위 시간(1초=1000)
delay <= 0 이면 키보드 입력 무한대기
waitKey 를 넣워줘야 영상이 팝업됩니다.
imshow 와 함께 써줘야하는데요. 안 넣어주면 이미지 팝업 후 바로 사라집니다.
특정 키를 누르면 이미지가 꺼지게도 합니다. 그 키를 누르기전까지는 영상을 계속 팝업 시켜줍니다!
7) cv2.destroyAllWIndows()
-destroyAll W indows : 모든 윈도우를 닫 음
우선 사용하는 메서드의 간략한 설명들입니다.
결과를 볼까요?
우측에 나온 것이 원본 이미지이며 좌측에 나온 것은 그레이스케일링한 이미지네요!
(요즘 보는 '사이코지만 괜찮아'의 서예지 님입니다. 아형 나왔을 때 첨봤는데 완전 매력적이신 분! ㅎㅎ)
자, 이제 코드 전문입니다.
# -*- coding: utf-8 -*-
import sys
import os
import cv2
import numpy as np
import matplotlib.pylab as plt
path = os.path.join('0704', '서예지님1.jpg')
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread(path)
# image load 에 실패한 경우 에러 메세지 출력
if img is None:
print('Image load failed')
sys.exit()
cv2.namedWindow('image1', cv2.WINDOW_NORMAL)
cv2.moveWindow('image1', 200, 200)
cv2.resizeWindow('iamge1', 700, 900)
cv2.imshow('image1', img)
cv2.namedWindow('image2', cv2.WINDOW_NORMAL)
cv2.moveWindow('image2', 600, 200)
cv2.resizeWindow('iamge2', 700, 900)
cv2.imshow('image2', img2)
cv2.waitKey()
cv2.destroyAllWindows()
imshow 와 함께 써줘야하는데요. 안 넣어주면 이미지 팝업 후 바로 사라집니다.
어떤 키를 누르면 이미지가 꺼지게 하는 메서드라고 생각하면 좋겠네요!
위 코드를 실행하면 원본 이미지와 그레이 스케일링 이미지 2개가 팝업되는데요.
esc 를 눌러야 이미지가 클로즈 되고, 코드 실행이 종료됩니다!
보너스!
waitKey() 에 아무것도 안 넣으면 esc 키를 눌러야 영상이 클로즈됩니다.
여기서 특정키를 누를 때 클로즈가 되도록 해볼게요!
아래 코드를 실행해보면 esc 누르면 클로즈가 되지 않고 키보드의 'q' 버튼을 눌러야 꺼지게 됩니다!
import cv2
img = cv2.imread('./0704/apple.jpg')
cv2.imshow("img", img)
# 'q' 를 눌러야 꺼지게 하기.
while True:
if cv2.waitKey() == ord('q'):
break
cv2.destroyAllWindows()
이상 포스팅 마치겠습니다 :)
### 참고 ###
https://m.blog.naver.com/samsjang/220499281999
https://copycoding.tistory.com/153
'머신러닝,딥러닝 > opencv' 카테고리의 다른 글
opencv 입문하기 6편 트랙바, 산술 연산 (0) | 2020.07.26 |
---|---|
opencv 입문하기 5편 마우스 이벤트(2) (0) | 2020.07.26 |
opencv 입문하기 4편 키보드, 마우스 이벤트(1) (0) | 2020.07.25 |
opencv 입문하기 3편 영상생성,추출, 그리기 함수 (0) | 2020.07.21 |
opencv 입문하기 2편 - 이미지 객체 속성 , 픽셀값 변경 (0) | 2020.07.20 |