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 좌표 계산하기
'Computer Vision' 카테고리의 다른 글
OpenCV 주요 기능 - 4. OpenCV 데이터 파일 입출력 (0) | 2020.02.14 |
---|---|
OpenCV 주요 기능 - 3. 이벤트 처리 (0) | 2020.02.13 |
OpenCV 주요 기능 - 1. 카메라와 동영상 파일 다루기(2) (0) | 2020.02.13 |
OpenCV 주요 기능 - 1. 카메라와 동영상 파일 다루기(1) (0) | 2020.02.13 |
OpenCV 주요 클래스 - 4. InputArray와 OutputArray 클래스 (0) | 2020.02.13 |
댓글