그리기 함수

매일 공부(ML)·2021년 11월 5일
0

OPEN CV

목록 보기
4/45

OpenCV 그리기 함수

  • 선, 도형, 문자열을 출력하는 도메인 제공

  • 선 그리기: 직선, 화살표, 마커

  • 도형 그리기: 사각형, 원, 타원, 다각형

  • 문자열 출력

  • 주의할 점

    	- 영상의 픽셀 값 자체를 변경
    
    	-> 그러므로 원본 영상을 미리 복사본으로 만든 후 그리기 & 출력
    • 그레이스케일 영상은 컬러로 그리기 안된다

      -> cv2.cvtColor()함수로 BGR컬러로 반환 후 그리기

선 그리기

  1. 직선 그리기
cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None) -> img
  • img: 그림 그릴 영상

  • pt1, pt2: 직선의 시작과 끝 점

  • color: 선 색상 또는 밝기(B,G,R)튜플 또는 정수값

  • thickness: 선 두께. 기본값은 1이다.

  • lineType: 선 타입으로 cv2.LINE_4, cv2.LINE_8(기본값), cv2.LINE_AA 등이 있다.

  • shift: 그리기 좌표 값의 축소 비율이고 기본값은 0이다.

도형 그리기

  1. 사각형 그리기
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
  • pt1, pt2: 사각형의 두 꼭지점 좌표(x,y) 튜플

  • rec: 사각형 위치 정보(x,y,w,h)튜플

  • thickness: 선 두께.기본값은 1이지만 음수(-1)를 지정하면 내부 채움

  1. 원 그리기
cv2.circle(img, center, radius, color, thickness=None, lineType=None, 
shift=None) -> img
  • center: 원의 중심좌표(x,y)튜플.

  • radius: 원의 반지름

  1. 다각형 그리기
cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, 
shift=None) -> img
  • pts: 다각형 외곽 점들의 좌표 배열. numpy.ndarray의 리스트.

    	- ex) [np.array([[10, 10], [50, 50], [10, 50]], dtype=np.int32)]
      
  • isClosed: 폐곡선 여부. True or False지정

문자열 출력

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, 
lineType=None, bottomLeftOrigin=None) -> img
  • text: 출력할 문자열

-org: 영상에서 문자열을 출력할 위치의 좌측 하단 좌표. (x, y) 튜플.

  • fontFace: 폰트 종류. cv2.FONTHERSHEY 로 시작하는 상수 중 선택

  • fontScale: 폰트 크기 확대/축소 비율

  • bottomLeftOrigin: True이면 영상의 좌측 하단을 원점으로 간주. 기본값은 False

Code of Examples


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), -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)
profile
성장을 도울 아카이빙 블로그

0개의 댓글