Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- c++코딩테스트합격자되기
- 데이터사이언스
- STL
- 제네릭프로그래밍
- 람다식
- 기본클래스
- 유도클래스
- 얕은복사
- python
- 상속
- OpenCV
- 11382번
- 프로그래머스lv2
- list comprehension
- 깊은복사
- 주피터
- 참조자
- OOP
- 다형성
- 코딩테스트
- 스택
- 동적바인딩
- C++
- 백준
- 포인터
- 인프런
- 멤버함수로구현
- 점프투파이썬
- 코드잇
- 연산자오버로딩
Archives
- Today
- Total
WjExplor Story
4. 도형 그리기 본문
도형 그리기, 왜 배워야 할까?
영상처리에서 결과를 눈으로 확인할 수 있게 만드는 것이 중요합니다. 단순히 좌표값만으로는 제대로 동작하는지 알기 어렵기 때문에, 도형을 그려 결과를 시각화하는 것이 필수입니다.
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 |