본문 바로가기
Computer Vision

OpenCV 주요 기능 - 2. 다양한 그리기 함수

by ksb0511 2020. 2. 13.

1. 직선 그리기

// 영상 위에 직선을 그리는 함수
void line(InputOutputArray img, Point pt1, Point, pt2, const Scalar& color, 
	int thickness = 1, int lineType = LINE_8, int shift = 0);

 

  • img 영상 위에 pt1부터 pt2까지의 직선을 그림.
  • color로 선 색상을, thickness로 선 두께를, lineType으로 직선을 그리는 방식을 지정함.
  • shift 인자에는 0보다 같거나 큰 정수를 지정. 지정한 크기만큼 직선 좌표 값을 (>>)을 수행한 후 직선 그리기 작업 수행.
  • thickness, lineType, shift 인자는 생략 가능
  • LineTypes 열거형 상수
LineTypes 열거형 상수 설명
FILLED -1 내부를 채움(직선 그리기 함수에는 사용 불가)
LINE_4 4 4방향 연결
LINE_8 8 8방향 연결
LINE_AA 18 안티에일리어싱(anti-aliasing)

// 영상 위에 화살표 형태의 직선 그리기
void arrowedLine(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, 
	int thickness=1, int line_type=8, int shift=0, int line_type=8, int shift=0, double tipLength=0.1);

 

  • 끝 점인 pt2에 화살표 모양의 직선 두 개를 추가로 그림.
  • 화살표 모양의 직선 길이는 tipLength()를 이용하여 조절. 기본값은 0.1

// 직선 그리기 함수를 이용하여 다양한 모양의 마커 그리기
void drawMarker(InputOutputArray img, Point position, const Scalar& color,
	int markerType = MARKER_CROSS, int markerSize=20, int thickness=1,
	int line_type=8);

 

  • 마커 종류는 markerType 인자를 통해 지정.
MarkerTypes 열거형 상수 설명
MARKER_CROSS 십자가 모양(+ 모양)
MARKER_TILTED_CROSS 45도 회전된 십자가 모양(X 모양)
MARKER_STAR MARKER_CROSS 모양과 MARKER_TILTED_CROSS 모양이 합쳐진 형태(* 모양)
MARKER_DIAMOND 마름모 모양
MARKER_SQUARE 정사각형 모양
MARKER_TRIANGLE_UP 위로 뾰족한 삼각형
MARKER_TRIANGLE_DOWN 아래로 뾰족한 삼각형

2. 도형 그리기

// 영상에 사각형 그리기
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
	int thickness = 1, int lineType =LINE_8, int shift = 0);
void rectangle(InputOutputArray img, Rect rec, const Scalar& color,
	int thickness = 1, int lineType =LINE_8, int shift = 0);

 

  • thickness 인자에 -1과 같은 음수나 FILLED 열거형 상수를 지정하면 내부를 채운 사각형.

// 영상에 원 그리기
void circle(InputOutputArray img, Point center, int radius,
	const Scalar& color, int thickness=1,
	int lineType=LINE_8, int shift=0);

 

  • 선타입을 LINE__AA로 지정하여 그리는 것이 가장 보기에 좋음.(타원도 마찬가지)

// 영상에 타원 그리기
void ellipse(InputOutputArray img, Point center, Size axes,
	double angle, double startAngle, double endAngle,
        cons Scalar& color, int thickness =1,
        int lineType =LINE_8, int shift =0);

 

  • axes 인자를 통해 타원의 크기를 지정. Size 자료형을 사용하며 x축 방향의 타원의 반지름과 y축 방향의 반지름을 지정.
  • startAngle, endAngle을 통해 호를 그리는 용도로 사용 가능. ex)0, 180으로 지정

// 영상에 다각형 그리기
void polylines(InputOutputArray img, InputrrayOfArrays pts,
	bool isClosed, const Scalar& color,
    	int thickness =1, int lineType =LINE_8, int shift =0);

 

  • pts는 다각형 외곽 점들의 좌표 배열을 의미. 주로 vector<Point> 타입.
  • isClosed는 다각형이 닫혀 있는 지를 나타내는 플래그. 이 값이 true일 경우, 마지막 꼭짓점과 첫번째 꼭짓점을 잇는 직선을 그림.

3. 문자열 출력하기

// 영상 위에 정해진 폰트로 문자열을 출력
void putText(InputOutputArray img, const String& text, Point org,
	int fontFace, double fontScale, Scalar color,
	int thickness =1, int lineType = LINE_8,
	bool bottomLeftOrigin = false);

 

  • org 위치에 문자열을 출력.
  • fontFace 인자로 폰트의 종류를 지정할 수 있음. HersheyFonts 열거형 상수 값을 지정.
  • fontScale은 문자열의 크기를 의미.
  • 한글 출력은 불가능. 영문, 숫자는 가능.
HersheyFonts 열거형 상수 설명
FONT_HERSHEY_SIMPLEX 일반 크기의 산세리프 폰트
FONT_HERSHEY_PLAIN 작은 크기의 산세리프 폰트
FONT_HERSHEY_DUPLEX 일반 크기의 산세리프 폰트(FONT_HERSHEY_SIMPLEX보다 복잡한 형태)
FONT_HERSHEY_COMPLEX 일반 크기의 세리프 폰트
FONT_HERSHEY_TRIPLEX 일반 크기의 세리프 폰트(FONT_HERSHEY_COMPEX보다 복잡한 형태)
FONT_HERSHEY_COMPLEX_SMALL FONT_HERSHEY_COMPLEX보다 작은 폰트
FONT_HERSHEY_SCRIPT_SIMPLEX 필기체 스타일의 폰트
FONT_HERSHEY_SCRIPT_COMPLEX 필기체 스타일의 폰트(FONT_HERSHEY_SCRIPT_SIMPLEX보다 복잡한 형태)
FONT_ITALIC 이탤릭체를 위한 플래그

// 문자열의 사각형 영역 크기를 가늠해주는 함수
Size getTextSize(const String& text, int fontFace, double fontScale,
	int thickness, int* baseLine);

 

  • 문자열이 차지할 사각형 영역 크기 정보를 반환해줌.
  • 영상 정중앙에 문자열을 배치하기 위해서 x,y 좌표 계산하기

댓글