taeridad19 님의 블로그

taeridad19 님의 블로그 입니다.

  • 2025. 5. 30.

    by. taeridad19

    목차

      OpenCV를 이용한 이미지 처리 기초

      OpenCV란 무엇인가?

      OpenCV(Open Source Computer Vision Library)는 컴퓨터 비전과 이미지 처리 분야에서 가장 널리 사용되는 오픈소스 라이브러리입니다. 실시간 이미지 및 영상 처리를 목적으로 개발되었으며, Python, C++, Java 등 다양한 언어를 지원합니다. 특히 Python과 함께 사용하면 강력한 이미지 처리 애플리케이션을 빠르게 구현할 수 있어 머신러닝, 딥러닝, 로봇 비전 등의 분야에서도 활용도가 높습니다.

      OpenCV는 이미지 로딩, 색상 변환, 필터링, 모폴로지 연산, 윤곽선 검출 등 다양한 기능을 제공합니다. 이 글에서는 OpenCV를 활용한 이미지 처리의 기본 개념과 필수 기능들을 단계적으로 소개합니다.


      OpenCV 설치 및 기본 설정

      OpenCV를 Python에서 사용하기 위해서는 먼저 라이브러리를 설치해야 합니다. pip 명령어를 사용해 간단하게 설치할 수 있습니다.

      pip install opencv-python
      

      추가적으로 GUI 기능이나 영상 코덱을 사용하려면 opencv-python-headless가 아닌 일반 opencv-python을 사용하는 것이 좋습니다.

      설치 후에는 다음과 같이 cv2 모듈을 임포트하여 사용합니다:

      import cv2
      

      이미지 읽기와 저장하기

      이미지 읽기

      이미지를 읽을 때는 cv2.imread() 함수를 사용합니다. 기본적으로 이미지는 BGR 색상 형식으로 불러와집니다.

      img = cv2.imread('example.jpg')  # 이미지 파일 불러오기
      

      이미지를 흑백으로 불러오려면 두 번째 인자로 cv2.IMREAD_GRAYSCALE을 사용합니다:

      gray_img = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)
      

      이미지 저장하기

      처리한 이미지를 저장하고 싶다면 cv2.imwrite() 함수를 사용하면 됩니다.

      cv2.imwrite('result.jpg', img)
      

      이미지 출력하기

      OpenCV는 cv2.imshow()를 통해 이미지를 창에 출력할 수 있습니다. cv2.waitKey()로 키 입력을 대기하고, cv2.destroyAllWindows()로 창을 종료합니다.

      cv2.imshow('Image', img)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
      

      이 코드는 실행 환경이 GUI를 지원해야 하며, 주피터 노트북에서는 제대로 동작하지 않을 수 있습니다.


      색상 공간 변환

      OpenCV는 기본적으로 BGR 색상 공간을 사용하지만, 다양한 색상 공간으로의 변환도 지원합니다. 가장 일반적인 변환은 RGB와 그레이스케일, HSV입니다.

      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
      
      • Grayscale: 밝기 정보만 남긴 단일 채널 이미지
      • HSV: 색상(Hue), 채도(Saturation), 명도(Value)로 분리

      색상 공간 변환은 마스크 추출이나 객체 인식 시 매우 유용합니다.


      이미지 크기 조절과 자르기

      이미지 크기 조절 (Resizing)

      OpenCV는 cv2.resize() 함수를 통해 이미지의 크기를 쉽게 조절할 수 있습니다.

      resized = cv2.resize(img, (300, 200))
      

      이미지 자르기 (Cropping)

      NumPy 배열 슬라이싱을 이용해 이미지의 일부분을 잘라낼 수 있습니다.

      cropped = img[50:150, 100:200]  # y축 범위, x축 범위
      

      블러링 및 필터 적용

      이미지를 부드럽게 만들거나 잡음을 제거할 때는 다양한 필터링 기법을 사용합니다.

      평균 블러링

      blurred = cv2.blur(img, (5, 5))
      

      가우시안 블러

      gaussian = cv2.GaussianBlur(img, (5, 5), 0)
      

      미디언 블러 (잡음 제거에 효과적)

      median = cv2.medianBlur(img, 5)
      

      각 블러는 이미지 처리의 목적(노이즈 제거, 디테일 흐림 등)에 따라 선택적으로 사용됩니다.


      에지 검출

      에지(윤곽선)를 검출하면 이미지에서 중요한 정보만 추출할 수 있습니다. 가장 대표적인 방법은 Canny 에지 검출입니다.

      edges = cv2.Canny(img, 100, 200)
      
      • 첫 번째와 두 번째 인자는 임계값으로, 조정에 따라 검출 민감도가 달라집니다.
      • 에지 검출은 객체 인식, 윤곽선 분석 등 고차원 응용의 기초가 됩니다.

      이진화 처리

      이진화는 이미지를 흑과 백의 두 가지 값으로 단순화하는 작업으로, 객체 추출에 주로 사용됩니다.

      ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
      
      • threshold() 함수는 지정된 임계값보다 크면 255(흰색), 작으면 0(검정)으로 처리합니다.
      • 자동 임계값 조정이 필요한 경우에는 Otsu 알고리즘을 사용할 수 있습니다.

      윤곽선 검출

      윤곽선은 이미지에서 연속된 경계선을 나타내며, 객체 추출이나 모양 분석에 중요합니다.

      contours, _ = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
      

      윤곽선 위에 선을 그리는 것도 가능합니다:

      cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
      

      실전 예제: 얼굴 인식

      OpenCV는 사전 훈련된 Haar Cascade 분류기를 통해 얼굴 검출 기능도 제공합니다.

      face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
      faces = face_cascade.detectMultiScale(gray, 1.1, 4)
      for (x, y, w, h) in faces:
          cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
      

      실시간 웹캠 영상에서도 얼굴을 인식할 수 있어, 간단한 감시 시스템이나 얼굴 기반 애플리케이션에 활용할 수 있습니다.


      결론: OpenCV로 시작하는 이미지 처리

      OpenCV는 간단한 이미지 불러오기부터 복잡한 컴퓨터 비전 작업까지 폭넓은 기능을 제공합니다. Python과 함께 사용하면 학습 난이도가 낮고, 응용도 매우 다양하여 프로토타입 개발과 연구에 적합합니다.

      처음 이미지 처리를 배우는 사람이라면 OpenCV를 통해 기초 개념을 확실히 다지고, 실전 프로젝트에 점차 확장해 나가는 것이 좋습니다. 이번 글에서 소개한 주요 기능들을 실습해 보면 이미지 처리의 기본기를 탄탄히 익힐 수 있을 것입니다.