[python] OpenCV를 사용하여 이미지에서 동영상에서 원 감지하기
OpenCV는 컴퓨터 비전 및 이미지 처리에 대한 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하면 다양한 이미지 및 비디오 처리 작업을 쉽게 수행할 수 있습니다. 이번 예제에서는 OpenCV를 사용하여 이미지에서 동영상에서 원을 감지하는 방법을 알아보겠습니다.
필요한 패키지 설치하기
먼저 OpenCV를 설치해야합니다. 아래 명령을 사용하여 필요한 패키지를 설치합니다.
pip install opencv-python-headless
이미지에서 원 감지하기
다음은 이미지에서 원을 감지하는 방법입니다. 원을 감지하기 위해 cv2.HoughCircles()
함수를 사용합니다.
import cv2
import numpy as np
# 이미지 불러오기
image = cv2.imread("image.jpg", 0)
# 이미지 전처리
image = cv2.medianBlur(image, 5)
image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
# 원 감지
circles = cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=0, maxRadius=0)
# 원 그리기
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (0, 255, 0), 4)
# 결과 이미지 출력
cv2.imshow("Circles", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
이미지에서 원을 감지하는 과정은 다음과 같습니다:
cv2.imread()
함수를 사용하여 이미지를 불러옵니다.cv2.medianBlur()
함수를 사용하여 이미지를 전처리합니다.cv2.cvtColor()
함수를 사용하여 이미지를 회색조에서 BGR 형식으로 변환합니다.cv2.HoughCircles()
함수를 사용하여 원을 감지합니다. 이 함수는 이미지, 원을 감지하기 위한 메소드, 이미지 해상도, 최소 거리, Canny 엣지 검출에 사용되는 적지원 파라미터 등을 인자로 받습니다.cv2.circle()
함수를 사용하여 원을 그립니다.- 결과 이미지를 출력합니다.
이제 위의 코드를 실행하면 이미지에서 원이 감지되는 것을 확인할 수 있습니다.
동영상에서 원 감지하기
OpenCV를 사용하면 동영상에서도 원을 감지할 수 있습니다. 동영상에서 원을 감지하는 방법은 이미지에서와 거의 동일합니다. 아래는 동영상에서 원을 감지하는 예제입니다.
import cv2
import numpy as np
# 동영상 열기
video = cv2.VideoCapture("video.mp4")
while True:
# 프레임 읽기
ret, frame = video.read()
if not ret:
break
# 이미지 전처리
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
# 원 감지
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=30, minRadius=0, maxRadius=0)
# 원 그리기
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(frame, (x, y), r, (0, 255, 0), 4)
# 결과 동영상 출력
cv2.imshow("Circles", frame)
if cv2.waitKey(1) == ord("q"):
break
# 동영상 종료
video.release()
cv2.destroyAllWindows()
위의 코드는 동영상에서 원을 감지하는 과정을 보여줍니다. 동영상은 cv2.VideoCapture()
함수를 사용하여 연 뒤, video.read()
함수를 사용하여 프레임을 읽어옵니다. 그리고 각 프레임에 대해 원을 감지하고 그려줍니다. ‘q’ 키를 누르면 동영상 재생이 멈춥니다.
이제 위의 코드를 실행하면 동영상에서 원이 감지되는 것을 확인할 수 있습니다.
결론
이번 예제에서는 OpenCV를 사용하여 이미지와 동영상에서 원을 감지하는 방법을 알아보았습니다. OpenCV는 높은 성능과 다양한 기능을 제공하여 컴퓨터 비전 및 이미지 처리 작업을 간편하게 수행할 수 있습니다.