Python/Python 심화

Python OpenCV를 이용한 이미지 처리

임베디드 친구 2025. 8. 20. 22:10
728x90
반응형

Python OpenCV를 이용한 이미지 처리

안녕하세요! 소프트웨어 공장를 방문해 주셔서 감사합니다. 오늘은 Python 고급 주제 중 하나인 OpenCV를 이용한 이미지 처리에 대해 다뤄보겠습니다. OpenCV는 컴퓨터 비전과 이미지 처리 작업에서 매우 강력한 라이브러리로, 다양한 기능을 제공합니다. 이번 포스팅에서는 OpenCV를 활용해 기본적인 이미지 처리 기법들을 익히고, 간단한 실습 예제를 통해 이를 활용하는 방법을 배워보겠습니다.

OpenCV란?

OpenCV(Open Source Computer Vision)는 컴퓨터 비전 및 머신 러닝 라이브러리로, 다양한 이미지 및 동영상 처리 기능을 제공합니다. OpenCV는 C++, Python, Java 등 다양한 언어를 지원하며, 특히 Python에서는 간단한 코드로 복잡한 작업을 구현할 수 있어 널리 사용됩니다.

준비 사항

  1. Python 설치
  2. OpenCV 라이브러리 설치

OpenCV는 pip 명령어로 간단히 설치할 수 있습니다:

pip install opencv-python
pip install opencv-python-headless  # GUI 기능이 필요 없는 경우

추가적으로 이미지와 관련된 작업에서 NumPy 라이브러리가 유용하므로 함께 설치하는 것을 권장합니다:

pip install numpy

OpenCV로 이미지 처리 시작하기

1. 이미지 읽기 및 표시

OpenCV를 사용하여 이미지를 읽고 화면에 표시할 수 있습니다. 다음은 기본적인 예제 코드입니다:

import cv2

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

# 이미지 표시
cv2.imshow('Displayed Image', image)
cv2.waitKey(0)  # 키 입력을 기다림
cv2.destroyAllWindows()  # 모든 창 닫기

코드 설명

  • cv2.imread: 이미지를 읽습니다. 경로를 정확히 지정해야 합니다.
  • cv2.imshow: 이미지를 표시합니다.
  • cv2.waitKey: 사용자의 키 입력을 기다립니다. 0은 무한 대기를 의미합니다.
  • cv2.destroyAllWindows: 열려 있는 모든 창을 닫습니다.

2. 이미지 크기 조정

이미지의 크기를 변경하는 방법입니다:

# 이미지 크기 변경
resized_image = cv2.resize(image, (300, 300))
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.resize: 원하는 크기로 이미지를 조정합니다. (300, 300)은 폭과 높이를 의미합니다.

3. 그레이스케일 변환

컬러 이미지를 그레이스케일로 변환하는 방법입니다:

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.cvtColor: 이미지의 색상 공간을 변경합니다. 여기서는 BGR에서 그레이스케일로 변환합니다.

4. 엣지 검출

엣지 검출은 이미지의 윤곽선을 추출하는 작업입니다. OpenCV에서는 Canny 알고리즘을 제공합니다:

edges = cv2.Canny(image, 100, 200)
cv2.imshow('Edge Detection', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.Canny: 첫 번째와 두 번째 매개변수는 엣지 검출의 하위 및 상위 임계값입니다.

5. 이미지 필터링

블러링(이미지를 흐리게 만드는) 처리를 통해 노이즈를 제거하거나 매끄럽게 만들 수 있습니다:

blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.GaussianBlur: 가우시안 필터를 사용해 이미지를 흐리게 만듭니다. 두 번째 매개변수는 커널 크기입니다.

6. 이미지 저장

처리한 이미지를 저장하는 방법입니다:

cv2.imwrite('output.jpg', gray_image)
  • cv2.imwrite: 지정된 경로에 이미지를 저장합니다.

예제 프로젝트: 이미지에서 특정 색상 추출하기

이번에는 이미지에서 특정 색상만 추출해보겠습니다. 예를 들어, 빨간색 영역만 추출한다고 가정합니다:

import cv2
import numpy as np

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

# HSV 색 공간으로 변환
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 빨간색 범위 지정
lower_red = np.array([0, 120, 70])
upper_red = np.array([10, 255, 255])
mask1 = cv2.inRange(hsv_image, lower_red, upper_red)

lower_red = np.array([170, 120, 70])
upper_red = np.array([180, 255, 255])
mask2 = cv2.inRange(hsv_image, lower_red, upper_red)

# 마스크 합치기
red_mask = mask1 + mask2

# 원본 이미지와 마스크 적용
red_extracted = cv2.bitwise_and(image, image, mask=red_mask)

cv2.imshow('Red Extracted', red_extracted)
cv2.waitKey(0)
cv2.destroyAllWindows()

코드 설명

  1. cv2.cvtColor: BGR 이미지를 HSV 색 공간으로 변환합니다.
  2. cv2.inRange: 특정 색상의 범위를 마스크로 만듭니다.
  3. cv2.bitwise_and: 원본 이미지에 마스크를 적용해 특정 색상만 남깁니다.

마무리

이번 포스팅에서는 OpenCV를 활용한 기본적인 이미지 처리 기술을 배우고, 간단한 예제들을 통해 실습해보았습니다. OpenCV는 강력하고 유연한 라이브러리로, 이를 통해 다양한 이미지 및 비디오 처리 작업을 수행할 수 있습니다. 앞으로도 더 고급 주제와 실습을 통해 OpenCV의 깊은 세계를 탐험해보세요!

728x90
반응형