파이썬 컴퓨터 비전

소개

컴퓨터 비전은 컴퓨터가 디지털 이미지나 비디오에서 패턴을 인식하고 분석하는 분야입니다. 최근 인공지능 분야의 발전을 통해 컴퓨터 비전 기술은 사물인식, 얼굴인식, 자연어처리 등 다양한 분야에서 활용되고 있습니다. 여기서는 파이썬 컴퓨터 비전에 대해 알아보겠습니다.

OpenCV

OpenCV는 오픈 소스 컴퓨터 비전 라이브러리입니다. C++로 구현되어 있지만 파이썬에서도 사용할 수 있습니다. OpenCV는 이미지 및 비디오 처리, 객체 검출, 추적, 기계 학습, 패턴 인식 등 다양한 이미지 처리 작업을 수행할 수 있습니다.

OpenCV를 사용하기 위해서는 라이브러리를 설치해야 합니다. 파이썬에서는 pip를 사용하여 간단하게 설치할 수 있습니다.

markdown
pip install opencv-python

위 명령을 실행하면 OpenCV 라이브러리가 설치됩니다.

이미지 로드 및 표시

우선 이미지를 불러와서 화면에 표시해보겠습니다. OpenCV를 사용하여 이미지를 로드하면 NumPy 배열 형태로 반환됩니다. NumPy 배열은 파이썬에서 배열을 다루기 위한 라이브러리로, 다차원 배열을 지원합니다.

“`python
import cv2

이미지 불러오기

img = cv2.imread(‘image.jpg’)

이미지 표시

cv2.imshow(‘image’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

위 코드에서 cv2.imread() 함수를 사용하여 이미지를 불러왔습니다. 불러온 이미지는 img 변수에 NumPy 배열 형태로 저장되어 있습니다. 그리고 cv2.imshow() 함수를 사용하여 이미지를 화면에 표시합니다. 마지막으로 cv2.waitKey(0) 함수를 사용하여 키보드 입력을 받을 때까지 대기하고, 창을 닫습니다.

이미지 필터링

이미지 필터링은 이미지에서 노이즈를 제거하거나, 이미지를 부드럽게 만들어주는 등의 작업을 수행합니다. OpenCV는 다양한 필터링 함수를 제공합니다.

블러 필터

가장 기본적인 필터로, 이미지를 부드럽게 만들어줍니다. 블러 필터는 cv2.blur() 함수를 사용하여 적용할 수 있습니다.

“`python
import cv2

이미지 불러오기

img = cv2.imread(‘image.jpg’)

블러 필터 적용

blur = cv2.blur(img, (7, 7))

이미지 표시

cv2.imshow(‘image’, img)
cv2.imshow(‘blur’, blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

위 코드에서 cv2.blur() 함수를 사용하여 이미지에 블러 필터를 적용했습니다. cv2.blur() 함수는 첫 번째 인자로 원본 이미지를, 두 번째 인자로 필터 크기를 받습니다. 필터 크기는 (7, 7)과 같이 튜플 형태로 지정합니다.

샤프닝 필터

샤프닝 필터는 이미지에서 선명도를 높여줍니다. OpenCV에서는 cv2.filter2D() 함수를 사용하여 샤프닝 필터를 적용할 수 있습니다.

“`python
import cv2
import numpy as np

이미지 불러오기

img = cv2.imread(‘image.jpg’)

샤프닝 필터 적용

kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharp = cv2.filter2D(img, -1, kernel)

이미지 표시

cv2.imshow(‘image’, img)
cv2.imshow(‘sharp’, sharp)
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

위 코드에서 cv2.filter2D() 함수를 사용하여 이미지에 샤프닝 필터를 적용했습니다. cv2.filter2D() 함수는 첫 번째 인자로 원본 이미지를, 두 번째 인자로 출력 이미지의 깊이를, 세 번째 인자로 필터 행렬을 받습니다. 필터 행렬은 NumPy 배열 형태로 지정하며, 샤프닝 필터에서는 위와 같이 3×3 행렬을 사용합니다.

객체 검출

객체 검출은 이미지에서 특정 객체를 인식하는 작업을 의미합니다. OpenCV에서는 다양한 객체 검출 알고리즘을 제공합니다.

얼굴 검출

얼굴 검출은 컴퓨터 비전 분야에서 가장 많이 사용하는 검출 알고리즘 중 하나입니다. OpenCV에서는 cv2.CascadeClassifier() 클래스를 사용하여 얼굴 검출을 수행할 수 있습니다.

“`python
import cv2

이미지 불러오기

img = cv2.imread(‘image.jpg’)

얼굴 검출

face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
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),(0,255,0),2)

이미지 표시

cv2.imshow(‘image’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
“`

위 코드에서 cv2.CascadeClassifier() 클래스를 사용하여 얼굴 검출을 수행합니다. cv2.CascadeClassifier() 클래스는 얼굴 검출을 위한 분류기 파일을 로드합니다. 분류기 파일은 OpenCV 설치 경로 내의 data/haarcascades 폴더에 위치해 있습니다.

얼굴 검출 함수는 cv2.detectMultiScale() 함수를 사용합니다. 이 함수는 첫 번째 인자로 검출할 이미지를, 두 번째 인자로 이미지 크기 대비 검출 기준값을, 세 번째 인자로 최소 검출 크기를 받습니다. 검출된 얼굴은 (x,y,w,h) 형태의 좌표값으로 반환되며, 이 값을 사용하여 검출된 얼굴에 사각형을 그렸습니다.

결론

여기서는 파이썬 컴퓨터 비전에 대해 알아보았습니다. OpenCV를 사용하여 이미지 로드, 필터링, 객체 검출 등 다양한 작업을 수행할 수 있습니다. 이외에도 다양한 컴퓨터 비전 라이브러리가 있으며, 인공지능과의 결합으로 더욱 발전하고 있습니다. 컴퓨터 비전이 가지는 가능성은 무한합니다.