본문 바로가기

머신러닝,딥러닝/opencv

opencv 입문하기 1편 - 이미지 reading

요즘 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

 

[02편] 이미지 reading과 writing

이미지 프로세싱 & 컴퓨터 비전OpenCV-Python 강좌 2편 : 이미지 reading과 writing필요환...

blog.naver.com

https://copycoding.tistory.com/153

 

OpenCV 2. 이미지 입력 출력 (Python)

2. 이미지 입력 출력 도형 그리기는 빈 공간에 무엇인가를 새로 그리고 보여주는 기능이지만 이미지 입출력은 기존에 존재하는 이미지 파일을 작업하는 부분이라 간단하게 테스트 할 수 있습니�

copycoding.tistory.com