본문 바로가기
프로그래밍

OpenCV와 Python을 활용한 이미지 처리 기초

by 이음코드 2025. 1. 5.
반응형

OpenCV(Open Source Computer Vision)는 컴퓨터 비전 및 이미지 처리 작업을 위한 강력한 라이브러리입니다. Python과 함께 사용하면 이미지 분석, 필터링, 객체 검출 등 다양한 이미지 처리 작업을 쉽게 수행할 수 있습니다. 이 글에서는 OpenCV의 기본적인 사용법과 주요 기능을 소개하고, 간단한 예제를 통해 실습해보겠습니다.


목차

  1. OpenCV란?
  2. OpenCV 설치 방법
  3. 이미지 읽기 및 표시
  4. 이미지 변환 및 조작
  5. 이미지 필터링
  6. 에지 검출
  7. 객체 검출 간단 예제

1. OpenCV 란?

OpenCV는 이미지 처리와 컴퓨터 비전 작업을 위한 오픈소스 라이브러리입니다. 다양한 프로그래밍 언어를 지원하며, Python과 함께 사용하면 이미지 처리 및 분석 작업을 간단하게 수행할 수 있습니다. 

 

OpenCV 주요 기능

  • 이미지 읽기, 쓰기, 변환
  • 필터링 및 이미지 변환
  • 에지 검출 및 객체 검출
  • 얼굴 인식, 동영상 처리 등 고급기능

 

2. OpenCV 설치 방법

Python에서 OpenCV를 사용하려면 opencv-python패키지를 설치해야 합니다. 터미널(또는 명령 프롬프트)에서 다음 명령어를 실행하세요

pip install opencv-python

또한 일부 고급 기능 (예: 이미지와 동영상 파일 압축/해제)을 사용하려면 opencv-contrib-python 패키지도 설치할 수 있습니다.

pip install opencv-contrib-python

 

설치 완료 후 Python에서 OpenCV를 불러올 수 있습니다.

import cv2
print(cv2.__version__)

 

3. 이미지 읽기 및 표시

OpenCV를 사용하면 이미지를 간단히 읽고 화면에 표시할 수 있습니다.

 

이미지 읽기

import cv2

# 이미지 파일 읽기
image = cv2.imread('image.jpg')

# 이미지 정보 확인
print(image.shape)  # (높이, 너비, 채널 수)

 

이미지 읽기

# 이미지를 창에 표시
cv2.imshow('Image', image)

# 키 입력 대기 후 창 닫기
cv2.waitKey(0)
cv2.destroyAllWindows()

 

흑백 이미지로 읽기

gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

4. 이미지 변환 및 조작

OpenCV에서는 다양한 방식으로 이미지를 변환하거나 조작할 수 있습니다.

 

이미지 크기 조정

resized = cv2.resize(image, (200, 200))
cv2.imshow('Resized Image', resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

이미지 회전

(h, w) = image.shape[:2]
center = (w // 2, h // 2)
matrix = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated = cv2.warpAffine(image, matrix, (w, h))
cv2.imshow('Rotated Image', rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

5. 이미지 필터링

OpenCV를 사용하면 간단한 필터를 적용하여 이미지의 품질을 개선하거나 특정 효과를 줄 수 있습니다.

 

블러링(Blur)

blurred = cv2.GaussianBlur(image, (15, 15), 0)
cv2.imshow('Blurred Image', blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

엣지 강화

sharp_kernel = [[0, -1, 0], [-1, 5, -1], [0, -1, 0]]
sharpened = cv2.filter2D(image, -1, kernel=sharp_kernel)
cv2.imshow('Sharpened Image', sharpened)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

6. 에지 검출

에지 검출은 이미지 처리에서 중요한 작접 중 하나로, 이미지의 윤곽선을 추출합니다.

 

Canny 에지 검출

edges = cv2.Canny(image, 100, 200)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

7. 객체 검출 간단 예제

Haar Cascade 분류기를 사용하여 얼굴 검출을 수행하는 간단한 예제를 소개합니다.

# Haar Cascade 파일 경로
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 이미지 읽기
image = cv2.imread('face.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 얼굴 검출
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

# 얼굴 영역 표시
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 결과 출력
cv2.imshow('Detected Faces', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

참고 사항

  • 출처 : 본 글의 코드는 OpenCV 공식 문서와 Python 학습 자료를 참고하여 작성되었습니다.
반응형