코드 여행 일기

OpenCV란 무엇인가? 본문

코딩/Python

OpenCV란 무엇인가?

할짝개발자 2024. 11. 22. 01:38
728x90
반응형


OpenCV(Open Source Computer Vision)는 컴퓨터 비전 및 이미지 처리 작업을 위한 오픈소스 라이브러리입니다.
주로 Python, C++, Java 등을 지원하며, 이미지 및 영상 데이터를 다루기 위한 강력한 도구로 널리 사용되고 있습니다.

 


 

OpenCV 주요 특징

  1. 다양한 플랫폼 지원
    • Windows, macOS, Linux 등 대부분의 운영 체제에서 사용 가능.
    • Raspberry Pi와 같은 임베디드 플랫폼도 지원.
  2. 풍부한 기능
    • 이미지 처리: 필터링, 변환, 윤곽선 추출, 히스토그램 분석 등.
    • 영상 처리: 객체 추적, 배경 제거, 동작 인식 등.
    • 머신 러닝: 객체 감지, 얼굴 인식, 딥러닝 프레임워크와의 통합.
  3. 빠른 속도와 효율성
    • C++ 기반으로 설계되어 속도가 빠르며, GPU 가속도 지원.

 


 

[1] OpenCV 설치 및 설정

1. 설치 방법

  1.Python 패키지 관리 도구(pip) 사용

pip install opencv-python
pip install opencv-python-headless  # GUI 기능 없이 설치할 때

 

  2.추가 모듈 설치
  OpenCV에서 일부 고급 기능을 사용하려면 opencv-contrib-python 설치:

pip install opencv-contrib-python

 

  3.설치 확인
  Python에서 설치 확인:

import cv2
print(cv2.__version__)

 


 

2. OpenCV 기본 설정

  1.라이브러리 임포트
     OpenCV를 사용하려면 cv2 모듈을 임포트합니다:

import cv2

 

  2.이미지 읽기와 표시

img = cv2.imread("example.jpg")  # 이미지 읽기
cv2.imshow("Image", img)         # 이미지 표시
cv2.waitKey(0)                   # 키 입력 대기
cv2.destroyAllWindows()          # 창 닫기

 

  3.영상 읽기와 재생

cap = cv2.VideoCapture("video.mp4")
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow("Frame", frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

 


 

[2] OpenCV의 주요 이미지 처리 기능

1. 이미지 읽기 및 저장

  • 이미지 읽기
img = cv2.imread("example.jpg", cv2.IMREAD_COLOR)  # 컬러로 읽기
gray = cv2.imread("example.jpg", cv2.IMREAD_GRAYSCALE)  # 흑백으로 읽기

 

  • 이미지 저장
cv2.imwrite("output.jpg", img)

 


 

2. 이미지 변환

  1.크기 조절

resized = cv2.resize(img, (300, 300))  # 300x300 크기로 변환
 

  2.회전

rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
rotated = cv2.warpAffine(img, M, (cols, rows))

 

3.색상 변환

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR -> Grayscale
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)    # BGR -> HSV

 


 

3. 이미지 필터링

  1.블러

blurred = cv2.GaussianBlur(img, (5, 5), 0)  # 가우시안 블러

 

  2.에지 검출

edges = cv2.Canny(img, 100, 200)  # 에지 검출
 

 

[3] OpenCV 활용 사례

1. 얼굴 및 객체 인식

  • Haar Cascade 사용
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)​
 

 

  • YOLO 또는 SSD 사용
    OpenCV DNN 모듈을 사용해 딥러닝 기반 객체 탐지 가능.

 

 

2. 실시간 동영상 처리

  • 카메라 캡처 및 필터 적용
cap = cv2.VideoCapture(0)  # 0은 기본 카메라
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow("Gray Video", gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

 


 

[4] 고급 기능

1. 윤곽선 검출

contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)

 


 

[5] 주의점 및 팁

  1. OpenCV는 GPU 가속 기능을 지원하므로 성능 향상을 위해 CUDA를 활용하세요.
  2. OpenCV 공식 문서와 튜토리얼은 새로운 기능 및 예제를 학습하는 데 매우 유용합니다:
    OpenCV 공식 사이트
  3. Python뿐 아니라 C++에서의 OpenCV 활용도 고려하세요. C++은 더 높은 성능을 제공합니다.

 

OpenCV는 기본적인 이미지 처리부터 고급 머신 러닝 작업까지 넓은 범위를 지원하는 강력한 도구입니다.
다양한 프로젝트에 OpenCV를 적용해 보세요!

728x90
반응형