& 프로그래밍/& openCV

openCV 프로그래밍 기초(이미지 파일 열기)

앤퍼센트 2021. 4. 15. 17:53

openCV(Open Source Computer Vision)이란

- 영상, 비디오처리, 컴퓨터 비전, 기계학습 등을 포함한 라이브러리로, 다양한 플랫폼에서 활용가능하다

 

파이썬을 통해 openCV를 활용할 것인데 이에 필요한 필수 프로그램과 라이브러리가 있다

- 파이썬 : VScode나 콘다, IDLE 사용하면되는데 주피터 노트북이나 코랩은 100% 작동하진 않는다

- numpy , Matplotlib, OpenCV 라이브러리

############ 필수 설치 라이브러리###################
pip install numpy
pip install matplotlib
pip install opencv-python

 

openCV에 대한 레퍼런스나 관련 서적은 워낙 많이 나와있기에 잘 찾아보심 될 것 같고....

나같은 경우엔 'python으로 배우는 openCV 프로그래밍'이라는 책을 참고하고 있다

 

본격적으로 openCV를 활용해서 이미지 파일을 열어보자

 

1. 먼저 라이브러리 임포트 시켜준다

import cv2

2. 열고싶은 이미지 파일을 경로부터 설정해서 변수로 받아오자

imageName = 'data/images/sample.jpg'

3. openCV를 이용해 이미지를 연다

image = cv2.imread(imageName, cv2.IMREAD_COLOR)

영상 입출력에 대한 디스플레이 함수는 여러가지가 있는데 아래 표로 정리하니 참고!

함  수 비  고
cv2.imread(파일명 [,flags]) → retval 영상 입력
cv2.imwrite(파일명, img[,params])  영상파일 출력
cv2.namedWindow(창 이름[,flags]) 창 생성
cv2.imshow(창 이름,mat) 창 표시
cv2.waitKey([,delay]) 키보드 입력 대기
cv2.destroyWindow(창 이름) 창 닫기, 파괴
cv2.destroyAllWindows() 모든 창 닫기

각 함수가 작동하는 조건이나 방식에 대한 자세한 설명은 생략한다

(실제로 작성하면서 함수작성패턴과 비고란을 잘 확인하고, 레퍼런스등을 참고하면 쉽게 이해할 수 있다)

 

4. 3번째 단계에서 받은 이미지 파일이 정상적인지 체크한다(생략가능)

if image is None :
	print('image could not open')

5. 이미지를 창으로 띄워서 확인해보자

cv2.imshow('image',image)

문제발생!

아마 5번까지 정상적으로 진행을 했고, 실행을 시켰는데 이미지 창이 띄워지지 않는 오류가 발생할 것이다

이건 오류가 아니라 컴퓨터가 정상적으로 창을 띄웠고 종료를 했는데 그 텀이 워낙 짧아서 사람이 채 확인을 못하는것이다

컴퓨터 "자, 너가 원하는대로 창켰다?! 끈다!" 뭐 요런 경우랄까?

 

그래서 우리가 창을 충분히 인식할 수 있도록 창을 생성하고 자동으로 종료되지 않도록 홀드를 걸어주면 된다

 

6. 이미지 창을 홀딩하자

cv2.waitKey(0) #숫자는 자유(관련 레퍼런스와 설명이 있으니 참고!)
cv2.destroyAllWindows()

위 코드를 입력하고 실행하면 정상적으로 창을 띄우고 우리가 키보드의 아무 버튼을 누르면 자동으로 종료된다

종료는 destroyAllWindows() 즉, 전체 창을 종료토록 명령했기 때문에 띄워진 모든 창이 다 닫히게 된다

 

<추가 응용>

3번 단계에서 이미지파일을 받아올 때 우리는 cv2.IMREAD_COLOR라는 함수를 입력했다.

함수를 단순하게만 봐도 '나는 컬러로 읽는다'라고 해석할 수 있는데, 그렇다면 컬러가 아닌 다른 색으로도 받을 수 있지 않을까?

정답은 당연히 가능!

# 컬러로 이미지를 받아왔다면
image = cv2.imread(imagename, cv2.IMREAD_COLOR)

# 회색조로 이미지를 받아오게 명령할 수도 있다
grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#컬러는 1, 회색조는 0, 알파값이 포함된 이미지는 -1로 지정되어 있다
#즉, cv2.IMREAD_COLOR 대신 1 이라는 숫자 하나로 대체할 수 있다는 뜻!