WjExplor Story

4. 도형 그리기 본문

Python/Python : Opencv Study

4. 도형 그리기

더블유제이플로어 2025. 8. 7. 16:44

도형 그리기, 왜 배워야 할까?

영상처리에서 결과를 눈으로 확인할 수 있게 만드는 것이 중요합니다. 단순히 좌표값만으로는 제대로 동작하는지 알기 어렵기 때문에, 도형을 그려 결과를 시각화하는 것이 필수입니다.⁣ 

OpenCV 주요 도형 그리기 함수

함수 설명

함수  설명
cv2.line(img, pt1, pt2, color, thickness) 직선 그리기 (pt1→pt2)
cv2.rectangle(img, pt1, pt2, color, thickness) 사각형 그리기 (pt1 대각선 ↔ pt2)
cv2.clipLine(imgRect, pt1, pt2,) ->retval, pt1, pt2 이미지 영역 내로 잘린 직선의 좌표 반환
cv2.circle(img, center, radius, color, thickness) 원 그리기
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness) 타원(호) 그리기
cv2.ellipse(img, box, color, thickness) 회전된 사각형에 내접하는 타원 그리기
cv2.ellipse2Poly(center, axes, angle, arcStart, arcEnd, delta) -> pts 타원 위의 다각형 좌표 생성
cv2.polyline(img, pts, isClosed, color, thickness) 다각형 그리기 (연속 선)
cv2.fillConvexPoly(img, points, color) 볼록 다각형 내부 색 채우기 (빠름)
cv2.fillPoly(img, pts, color) 다각형 채우기 (복수도 가능)

※ pt는 point의 약자
※ thickness 가 -1이면 color색상으로 채운 사각형을 그린다.

예제 코드 – 흰 배경 위에 직선 & 사각형 그리기

import cv2
import numpy as np

img = np.zeros(shape=(512,512,3), dtype=np.uint8)+255
# white 배경 생성
# 위 코드와 동일한 코드들
#img = np.ones((512,512,3),np.uint8)*255
#img = np.full(shape=(512,512,3),fill_value=255, dtype=np.uint8)
#img = np.zeros((512,512,3),np.uint8) # Black 배경

pt1 = 100,100
pt2 = 400,400
cv2.rectangle(img,pt1,pt2,(0,255,0),2)

cv2.line(img,(0,0),(500,0), (255,0,0),5)
cv2.line(img,(0,0),(0,500),(0,0,255),5)

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

코드 실행파일

  • NumPy를 활용해 이미지를 직접 생성할 수 있으며, 배경 색을 쉽게 조절 가능
  • 색 값은 BGR 순서로 입력합니다:
    • (255,0,0) → 파랑
    • (0,255,0) → 초록
    • (0,0,255) → 빨강⁣

🤔 왜 OpenCV에서 numpy를 써야 할까?

OpenCV에서 이미지는 사실 NumPy 배열(numpy.ndarray)입니다.
즉, 이미지를 다루려면 numpy가 필수로 필요해요.

예시:

import cv2
import numpy as np

# 512x512 크기의 흰 배경 이미지 만들기
img = np.zeros((512, 512, 3), dtype=np.uint8) + 255
  • np.zeros(...): 모두 0인 배열을 만듦 → 검은 이미지
  • + 255: 밝기 최대 → 흰 이미지
  • dtype=np.uint8: 픽셀 값을 0~255로 설정 (OpenCV는 이 형식을 사용)

🎯 numpy로 할 수 있는 주요 기능

기능   설명
배열 생성 np.zeros(), np.ones(), np.full() 등으로 이미지 만들기
배열 연산 이미지 밝기 조절, 마스크 처리, 연산
슬라이싱 이미지 일부 자르기, ROI 설정
조건 처리 특정 조건의 픽셀만 선택하거나 수정
배열 모양 변경 .reshape(), .transpose() 등

💡 예시 코드: numpy와 OpenCV 함께 사용하기

import cv2
import numpy as np

# 검은 배경 생성
img = np.zeros((300, 300, 3), dtype=np.uint8)

# 가운데에 흰 원 그리기
cv2.circle(img, (150, 150), 50, (255, 255, 255), -1)

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

코드 실행파일

🧠 요약

키워드  설명
numpy 수치 계산 라이브러리 (OpenCV 이미지 배열을 다룰 때 필수)
as np numpy를 np라는 짧은 이름으로 사용하기 위한 별칭
OpenCV와의 관계 OpenCV 이미지도 결국 numpy 배열 (영상처리에 필수 도구)

출처 : https://kali-live.tistory.com/9

 

OpenCV 강좌 4 - 도형을 그리자.

이번 강좌에서는 OpenCV를 활용해 그림을 그려보도록 하자. "도형을 왜 그려요?" 위와 같은 의문이 들 수도 있다. 백문불여일견[ 百聞不如一見 ] 이라 하던가. 다음 그림을 보고 아! 하고 무릎을 탁

kali-live.tistory.com

 

'Python > Python : Opencv Study' 카테고리의 다른 글

허프(Hough) 변환  (2) 2025.09.11
3. 비디오 프레임 캡쳐 및 표시  (4) 2025.08.07
2. 영상 입출력과 Display  (1) 2025.08.07