OpenCV는 영상 처리를 위한 라이브러리입니다. 파이썬에서 OpenCV를 사용하려면 cv2 모듈을 import해야 합니다. 이번 글에서는 cv2 모듈의 기본적인 사용법과 실제 예제를 포함한 코드 샘플을 알아보겠습니다.
이미지 읽기
cv2.imread() 함수를 사용하여 이미지를 읽을 수 있습니다. 이 함수는 이미지 파일의 경로를 인자로 받고, 이미지를 NumPy 배열로 반환합니다.
import cv2
# 이미지 읽기
img = cv2.imread('image.jpg')
# 이미지 출력
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 cv2.imshow() 함수는 이미지를 화면에 출력합니다. cv2.waitKey() 함수는 키보드 입력을 기다리는 동안 이미지를 출력하며, cv2.destroyAllWindows() 함수는 모든 창을 닫습니다.
이미지 쓰기
cv2.imwrite() 함수를 사용하여 이미지를 파일로 저장할 수 있습니다.
import cv2
# 이미지 읽기
img = cv2.imread('image.jpg')
# 이미지 회전
img_rotated = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
# 이미지 쓰기
cv2.imwrite('image_rotated.jpg', img_rotated)
위 코드에서 cv2.rotate() 함수는 이미지를 회전시키며, cv2.imwrite() 함수는 회전된 이미지를 파일로 저장합니다.
이미지 필터링
cv2.filter2D() 함수를 사용하여 이미지를 필터링할 수 있습니다. 이 함수는 이미지와 필터 커널을 인자로 받고, 필터링된 이미지를 반환합니다.
import cv2
import numpy as np
# 이미지 읽기
img = cv2.imread('image.jpg')
# 필터 커널 정의
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
# 이미지 필터링
img_filtered = cv2.filter2D(img, -1, kernel)
# 이미지 출력
cv2.imshow('image', img_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 필터 커널은 NumPy 배열로 정의되며, 이미지 필터링 결과는 cv2.filter2D() 함수로 얻을 수 있습니다.
객체 검출
cv2.CascadeClassifier() 함수와 detectMultiScale() 함수를 사용하여 객체를 검출할 수 있습니다. 이 함수들은 얼굴 인식 등 다양한 분야에서 사용됩니다.
import cv2
# 이미지 읽기
img = cv2.imread('image.jpg')
# CascadeClassifier 객체 생성
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 이미지 grayscale 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 얼굴 검출
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 얼굴에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 이미지 출력
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 얼굴 검출을 위해 haarcascade_frontalface_default.xml 파일이 필요합니다. 이 파일은 OpenCV 공식 GitHub 저장소에서 다운로드할 수 있습니다.
결론
이상으로 cv2 모듈의 기본적인 사용법과 실제 예제가 포함된 코드 샘플을 알아보았습니다. 이를 바탕으로 OpenCV를 사용하여 이미지 처리 및 객체 검출 등 다양한 작업을 수행할 수 있습니다.
'파이썬 > OpenCV' 카테고리의 다른 글
파이썬 모듈 : OpenCV 가장자리 검출 (0) | 2023.03.26 |
---|---|
파이썬 모듈 : OpenCV 이미지 확대, 회전, 자르기 (0) | 2023.03.25 |
이미지의 크기 변환 cv2.resize() (0) | 2022.11.17 |
CV2로 IPCAMERA 영상을 동영상으로 저장 해보자 (0) | 2022.11.16 |
CV2로 IPCAMERA 영상을 출력해보자 (0) | 2022.11.16 |