[ch02] Python 기초 사용법 - OpenCV 그리기 함수

빨주노·2021년 8월 6일
0

OpenCV 그리기 함수

  • OpenCV는 영상에 선, 도형, 문자열을 출력하는 그리기 함수를 제공
  • 선 그리기 : 직선, 화살표, 마커 등
  • 도형 그리기 : 사각형, 원, 타원, 다각형 등
  • 문자열 출력

그리기 함수 사용시 주의할 점

  • 그리기 알고리즘을 이용하여 영상의 픽셀 값 자체를 변경
    → 원본 영상이 필요하면 복사본을 만들어서 그리기 & 출력
  • 그레이스케일 영상에는 컬러로 그리기 안됨
    → cv2.cvtColor() 함수로 BGR 컬러 영상으로 변환한 후 그리기 함수 호출

직선 그리기

cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None) -> img
  • img : 그림을 그릴 영상
  • pt1, pt2 : 직선의 시작점과 끝점. (x, y) 튜플.
  • color : 선 색상 또는 밝기. (B, G, R) 튜플 또는 정수값.
  • thickness : 선 두께. 기본값은 1.
  • lineType : 선 타입. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택. 기본값은 cv2.LINE_8
  • shift : 그리기 좌표 값의 축소 비율. 기본값은 0.

사각형 그리기

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None) -> img
cv2.rectangle(img, rec, color, thickness=None, lineType=None, shift=None) -> img
  • img : 그림을 그릴 영상
  • pt1, pt2 : 사각형의 두 꼭지점 좌표. (x, y) 튜플
  • rec : 사각형 위치 정보. (x, y, w, h) 튜플
  • colo : 선 색상 또는 밝기. (B, G, R) 튜플 또는 정수값.
  • thickness : 선 두께. 기본값은 1. 음수(-1)를 지정하면 내부를 채움.
  • lineType : 선 타입. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택. 기본값은 cv2.LINE_8
  • shift : 그리기 좌표 값의 축소 비율. 기본값은 0

원 그리기

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None) -> img
  • img : 그림을 그릴 영상
  • center : 원의 중심 좌표. (x, y) 튜플.
  • radius : 원의 반지름
  • color : 선 색상 또는 밝기. (B, G, R) 튜플 또는 정수값.
  • thickness : 선 두께. 기본값은 1. 음수(-1)를 지정하면 내부를 채움.
  • lineType : 선 타입. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택. 기본값은 cv2.LINE_8
  • shift : 그리기 좌표 값의 축소 비율. 기본값은 0.

다각형 그리기

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None) -> img
  • img : 그림을 그릴 영상
  • pts : 다각형 외곽 점들의 좌표 배열. numpy.ndarray의 리스트.
    • ex. [np.array([[10, 10], [50, 50], [10, 50]], dtype=np.int32)]
  • isClosed : 폐곡선 여부. True 또는 False 지정.
  • color : 선 색상 또는 밝기. (B, G, R) 튜플 또는 정수값.
  • thickness : 선 두께. 기본값은 1. 음수(-1)를 지정하면 내부를 채움.
  • lineType : 선 타입. cv2.LINE_4, cv2.LINE_8, cv.LINE_AA 중 선택. 기본값은 cv2.LINE_8
  • shift : 그리기 좌표 값의 축소 비율. 기본값은 0.

문자열 출력

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None) -> img
  • img : 그림을 그릴 영상
  • text : 출력할 문자열
  • org : 영상에서 문자열을 출력할 위치의 좌측 하단 좌표. (x, y) 튜플
  • fontFace : 폰트 종류. cv2.FONTHERSHEY로 시작하는 상수 중 선택
  • fontScale : 폰트 크기 확대/축소 비율
  • thickness : 선 두께. 기본값은 1. 음수(-1)를 지정하면 내부를 채움.
  • lineType : 선 타입. cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA 중 선택.
  • bottomLeftOrigin : True이면 영상의 좌측 하단을 원점으로 간주. 기본값은 False.
  • cv2.putText()에서 지원하는 fontFace 상수와 실제 출력 모양

다양한 그리기 함수 실행 예제

img = np.full((400, 400, 3), 255, np.uint8)

cv2.line(img, (50, 50), (200, 50), (0, 0, 255), 5)
cv2.line(img, (50, 60), (150, 160), (0, 0, 128))

cv2.rectangle(img, (50, 200, 150, 100), (0, 255, 0), 2)
cv2.rectangle(img, (70, 220), (180, 280), (0, 128, 0), -1)

cv2.circle(img, (300, 100), 60, (255, 0, 0), 3, cv2.LINE_AA)
cv2.circle(img, (300, 100), 30, (255, 255, 0), (0, 128, 0), -1, cv2.LINE_AA)

pts = np.array([[250, 200], [300, 200], [350, 300], [250, 300]])
cv2.polylines(img, [pts], True, (255, 0, 255), 2)

text = 'Hello? OpenCV ' + cv2.__version__
cv2.putText(img, text, (50, 350), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

  • 만약 putText()에서 bottomLeftOrigin=True 라면?
profile
딥 하게 딥러닝 하는중

0개의 댓글