Programming/[Python] Opencv

[Python] 파이썬 opencv 라이브러리의 다양한 예제

호락호락한순무 2023. 8. 8. 22:50
반응형

파이썬 OpenCV 라이브러리의 다양한 예제

소개

OpenCV(Open Source Computer Vision Library)는 이미지 및 비디오 처리를 위한 오픈 소스 컴퓨터 비전 및 머신 러닝 소프트웨어 라이브러리입니다. Python에서 OpenCV를 사용하여 다양한 컴퓨터 비전 작업을 수행할 수 있습니다.

이 포스트에서는 Python에서 OpenCV를 사용하는 몇 가지 예제를 제공합니다. 이러한 예제들은 OpenCV를 사용하여 이미지를 읽고 표시하며, 이미지나 비디오에서 특정 객체를 검출하는 등 다양한 작업을 수행하는 방법을 알려줍니다.

예제 1 : 이미지 읽기와 표시

import cv2

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

# 이미지 표시
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

이 예제에서는 cv2.imread() 함수를 사용하여 이미지를 읽고, cv2.imshow() 함수를 사용하여 이미지를 표시합니다. cv2.waitKey(0)은 키 입력을 기다리는 역할을 하며, cv2.destroyAllWindows()는 모든 창을 닫습니다.

예제 2 : 비디오 읽기와 표시

import cv2

# 비디오 읽기
cap = cv2.VideoCapture('video.mp4')

while True:
    # 비디오 프레임 읽기
    ret, frame = cap.read()

    # 비디오가 끝나면 반복문을 종료
    if not ret:
        break

    # 비디오 표시
    cv2.imshow('Video', frame)

    # 'q' 키를 누르면 반복문을 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 비디오 캡처 객체 해제
cap.release()
cv2.destroyAllWindows()

이 예제에서는 cv2.VideoCapture() 함수를 사용하여 비디오를 읽고, cap.read() 함수를 사용하여 비디오의 프레임을 읽어옵니다. 비디오가 끝나면 반복문을 종료하고, 'q'를 누르면 반복문을 종료합니다.

예제 3 : 얼굴 검출

import cv2

# 얼굴 검출기 초기화
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

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

# 이미지를 흑백으로 변환
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), (255, 0, 0), 2)

# 결과 이미지 표시
cv2.imshow('Faces', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

이 예제에서는 cv2.CascadeClassifier() 함수를 사용하여 얼굴 검출기를 초기화하고, cv2.imread() 함수를 사용하여 이미지를 읽어옵니다. 그 다음, 이미지를 흑백으로 변환하고, face_cascade.detectMultiScale() 함수를 사용하여 얼굴을 검출합니다. 검출된 얼굴에는 사각형을 그리고, 최종 이미지를 표시합니다.

예제 4 : 특징점 검출과 매치

import cv2
import numpy as np

# 이미지 읽기
img1 = cv2.imread('img1.jpg', 0)
img2 = cv2.imread('img2.jpg', 0)

# 특징점 검출기 초기화
orb = cv2.ORB_create()

# 특징점과 디스크립터 계산
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

# 매칭기 초기화
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

# 특징점 매칭
matches = bf.match(des1, des2)

# 매칭 결과를 거리로 정렬
matches = sorted(matches, key=lambda x: x.distance)

# 매칭 결과를 그리기위한 최대 10개의 매칭만 선택
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=2)

# 결과 이미지 표시
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()

이 예제에서는 cv2.ORB_create() 함수를 사용하여 특징점 검출기를 초기화하고, orb.detectAndCompute() 함수를 사용하여 특징점과 디스크립터를 계산합니다. 그 다음, cv2.BFMatcher() 함수로 매칭기를 초기화하고, bf.match() 함수를 사용하여 특징점을 매칭합니다. 매칭된 결과를 거리로 정렬하고, 매칭 결과를 그리기위해 cv2.drawMatches() 함수를 사용합니다.

예제 5 : 영상 처리

import cv2

# 비디오 읽기
cap = cv2.VideoCapture('video.mp4')

while True:
    # 비디오 프레임 읽기
    ret, frame = cap.read()

    # 비디오가 끝나면 반복문을 종료
    if not ret:
        break

    # 이미지를 흑백으로 변환
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 이미지 처리 (예: 엣지 검출)
    edges = cv2.Canny(gray, 100, 200)

    # 영상 표시
    cv2.imshow('Video', edges)

    # 'q' 키를 누르면 반복문을 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 비디오 캡처 객체 해제
cap.release()
cv2.destroyAllWindows()

이 예제에서는 이전 예제와 비슷하지만, 프레임을 흑백으로 변환한 후 이미지 처리를 수행합니다. 이 예제에서는 엣지 검출을 수행하기 위해 cv2.Canny() 함수를 사용했습니다.

장단점

OpenCV는 이미지 및 비디오 처리에 유용한 다양한 기능을 제공합니다. 다양한 작업을 위한 다양한 함수와 알고리즘을 포함하고 있으며, Python에서도 사용하기 편리합니다. 또한 OpenCV는 무료이며 오픈 소스이므로 누구나 사용하고 개선할 수 있습니다.

하지만 OpenCV는 고급 알고리즘과 머신 러닝 기능이 부족할 수 있습니다. 또한 일부 기능은 다른 라이브러리와의 통합이 필요할 수 있습니다.

결론

Python에서 OpenCV를 사용하여 이미지 및 비디오 처리를 수행하는 다양한 예제를 살펴보았습니다. 이러한 예제들은 OpenCV를 사용하는 방법을 이해하는 데 도움이 될 것입니다. OpenCV는 다양한 컴퓨터 비전 작업에 유용한 도구이며, Python과의 통합으로 인해 사용하기 쉽습니다. 가능한한 사용자들이 OpenCV를 익히고 Python에서 적용시킬 수 있도록 최대한 자세하고 구체적으로 설명했습니다.

반응형
//