0. Open CV(Computer Vision)
다양한 영상(이미지) / 동영상 처리에 사용되는 오픈소스 라이브러리이다.
이미지 처리는 이미지로부터 다양한 데이터를 수집하고 유용한 정보를 얻기 위해 이미지를 조작하고 분석하는 과정을 의미한다. Anaconda Jupyter notebook에서 OpenCV를 이용하여 이미지 데이터를 가공할 수 있다.
1. 환경설정
Anaconda Jupyternotebook 환경에서 다양한 이미지와 영상을 출력하고 가공하기 위해 먼저 Anaconda가 설치되어있음을 전재로 Anaconda Prompt에서 다음 명령어 수행한다.
pip install opencv-python
위의 명령어를 실행하여 설치에 성공했다면 다음을 Jupyter notebook에서 실행했을 때 cv2에 대한 버전정보가 출력된다.
# OpenCV 설치 확인
import cv2
cv2.__version__
'4.7.0'
2. 이미지 출력
기본적인 이미지 출력의 순서는 파일 읽기 - 출력 창 정의 - 사용자키 입력대기 시간 지정 - 창 닫기이다. 이 과정이 모두 한번에 실행되어야지만 정상적으로 파일을 읽고 출력하여 창을 닫는 것 까지 마무리 할 수 있다.
이미지 출력 과정
1 ) 파일 읽기
file_name = cv2.imread("path")
입력받은 경로의 파일을 "file_name"으로 읽어온다.
2 ) 출력 창 정의
cv2.imshow("window_name", file_name)
window_name이라는 창 이름으로 file_name 이미지를 출력한다.
3 ) 사용자키 입력대기 시간 지정
cv2.waitKey(ms)
ms시간 동안 사용자키 입력을 대기한다.
4 ) 창 닫기
cv2.destroyAllWindows()
열려있는 모든 창을 닫는다. 아무키나 눌러도 창을 닫을 수 있다.
위 과정을 바탕으로 같은 폴더 안에 있는 img.jpg파일을 image라는 창에 출력하고 창을 닫는 과정을 다음과 같이 나타낼 수 있다.
import cv2
# 해당 경로의 파일 읽어오기
img = cv2.imread("img.jpg")
# image라는 이름의 창에 img를 표시
cv2.imshow("image", img)
# 지정된 시간(ms)동안 사용자키의 입력을 대기
cv2.waitKey(0)
# 모든 창 닫기
cv2.destroyAllWindows()
사용자키 입력 대기시간 (waitKey)
cv2.waitKey(sec)는 지정된 시간(ms)동안 사용자키 입력을 대기한다. 따라서 지정된 시간 이후에는 자동으로 이미지창이 닫힌다. 예를들어 5000ms(5s) 후에 자동으로 이미지가 닫히게 하고 싶은 경우 다음과 같이 실행한다.
import cv2
img = cv2.imread("img.jpg")
cv2.imshow("image", img)
cv2.waitKey(5000)
cv2.destroyAllWindows()
Key에 waitKey를 입력받은 경우
key에 cv2.waitKey(0) 입력한 후 이를 print하면 다음과 같은 결과가 출력된다.
import cv2
img = cv2.imread("img.jpg")
cv2.imshow('img', img)
key = cv2.waitKey(0)
print(key)
cv2.destroyAllWindows()
97
여기서 출력된 97은 사용자가 이미지가 출력되었을 때 "a"키를 눌렀기 때문이다. 이처럼 이미지 창이 출력되었을 때 사용자가 "a"키를 누르면 97이, "b"키를 누르면 98 출력되는데, 이는 각각의 키가 가지고 있는 고유코드인 아스키 코드가 출력되는 것이다. 이를 이용해 어떤 키를 눌렀을 때 특정 동작을 실행하는 경우 위와 같이 key값을 이용한다.
읽기 옵션
이미지를 읽어올때 다음의 3가지의 옵션이 있다.
1. cv2.IMREAD_COLOR : 이미지를 컬러로 읽어온다. 단 투명 영역은 무시한다. (기본값)
2. cv2.IMREAD_GRAYSCALE : 이미지를 흑백으로 읽어온다.
3. cv2.IMREAD_UNCHANGED : 이미지를 투명영역까지 포함하여 컬러로 읽어온다.
위 옵션은 다음과 같이 파일을 읽는 단계(imread) 에서 실행한다.
import cv2
img_color = cv2.imread("pngimg.png", cv2.IMREAD_COLOR)
img_gray = cv2.imread("pngimg.png", cv2.IMREAD_GRAYSCALE)
img_unchanged = cv2.imread("pngimg.png", cv2.IMREAD_UNCHANGED)
cv2.imshow("img_color", img_color)
cv2.imshow("img_gray", img_gray)
cv2.imshow("img_unchanged", img_unchanged)
cv2.waitKey(0)
cv2.destroyAllWindows()
shape
shape 함수를 통해 이미지의 height, width, channel 정보를 알 수 있다.
import cv2
img = cv2.imread("img.jpg")
img.shape
(391, 640, 3)
여기서 channel은 이미지의 색상조합 수를 의미한다. 즉 channel이 3인것은 RGB 3가지의 색상조합을 가진다는 의미한다.
'Study > ML | DL' 카테고리의 다른 글
[Python] OpenCV를 이용한 이미지/영상 처리 - 파일 저장 (0) | 2023.05.17 |
---|---|
[Python] OpenCV를 이용한 이미지/영상 처리 - 텍스트 (0) | 2023.05.12 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기2(원형, 사각형, 다각형) (0) | 2023.05.04 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기1(영역색칠, 직선) (0) | 2023.05.03 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 동영상 및 카메라 출력 (0) | 2023.05.02 |