[Computer Vision] OpenCV 주요 기능
2023. 10. 11. 00:07ㆍRun/Computer Vision
1. 직선 그리기
- line()
- 영상 위에 직선 그리는 함수, cv namespace에 선언되어 있음
- line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)
- pt1: 시작점 / pt2: 끝점 / shift는 웬만해서 안 씀
[ lineType ]
FILLED (-1) | 내부를 채움 (직선 그리기 함수에는 사용 불가) |
LINE_4 (4) | 4방향 연결 |
LINE_8 (8) | 8방향 연결 |
LINE_AA (18) | anti-aliasing |
- arrowedLine()
- 화살표 형태의 직선 그릴 때 사용
- arrowedLine(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0, double tipLength = 0.1);
- shift까지는 line()과 동일, tipLength는 화살표 부분의 크기를 조절
- drawMarker()
- 직선 그리기 함수를 이용하여 다양한 모양의 marker 그림
- drawMarker(InputOutputArray img, Point position, const Scalar& color, int markerType = MARKER_CROSS, int markerSize = 20, int thickness = 1, int line_type = 8);
[ markerType ]
MARKER_CROSS | 십자가 모양 |
MARKER_TILTED_CROSS | 45도 회전된 십자가 모양 |
MARKER_STAR | 위 두 개가 합쳐진 모양 |
MARKER_DIAMOND | 마름모 모양 |
MARKER_SQUARE | 정사각형 모양 |
MARKER_TRIANGLE_UP | 위로 뾰족한 삼각형 모양 |
MARKER_TRIANGLE_DOWN | 아래로 뾰족한 삼각형 모양 |
2. 도형 그리기
- rectangle()
- 영상에 사각형 그리는 함수
- rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
- rectangle(InputOutputArray img, Rect rec, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
- circle()
- 원 그리는 함수
- circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
- ellipse()
- 타원 그리는 함수
- ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
- axes: 타원 반지름 (x축 반지름, y축 반지름) / angle: 타원 회전 각도 / startAngle, endAngle: 타원 호의 시작, 끝 각도
- polylines()
- 임의의 다각형 그리는 함수
- polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
- pts: 다각형 외곽 점들의 좌표 배열 (vector<Point>) / isClosed: 다각형이 닫혀 있는지 여부
- thickness -1 이어도 내부 칠하지 않음, fillPoly() 사용
3. 문자열 출력하기
- putText()
- 영상 위에 정해진 폰트로 문자열 출력
- 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: cv::HersheyFonts에서 폰트 종류 선택 / bottomLeftOrigin: 원점 좌측 하단 or 좌측 상단
[ fontFace ]
FONT_HERSHEY_SIMPLEX | 일반 크기의 산세리프 폰트 |
FONT_HERSHEY_PLAIN | 작은 크기의 산세리프 폰트 |
FONT_HERSHEY_DUPLEX | 일반 크기의 산세리프 폰트 (SIMPLEX보다 복잡한 형태) |
FONT_HERSHEY_COMPLEX | 일반 크기의 세리프 폰트 |
FONT_HERSHEY_TRIPLEX | 일반 크기의 세리프 폰트 (COMPLEX보다 복잡한 형태) |
FONT_HERSHEY_COMPLEX_SMALL | COMPLEX보다 작은 폰트 |
FONT_HERSHEY_SCRIPT_SIMPLEX | 필기체 스타일 폰트 |
FONT_HERSHEY_SCRIPT_COMPLEX | 필기체 스타일 폰트 (SIMPLEX보다 복잡한 형태) |
FONT_ITALIC | 이탤릭체 설정 flag |
- getTextSize()
- 문자열 출력을 위해 필요한 사각형 영역 크기 반환
- 문자열이 한쪽으로 치우치지 않고 적당한 위치에 출력되도록 할 수 있음
- getTextSize(const String& text, int fontFace, double fontScale, int thickness, int* baseLine);
- baseLine: 가장 하단의 텍스트 위치를 기준으로 하는 기준선의 y좌표 (p, g, y 같은 알파벳을 위함..)
- 영상의 가로, 세로 크기는 img.width, img.height 또는 img.rows, img.cols로 구할 수 있음
- 영상의 크기와, 문자열이 출력될 사각형 크기 알면 다음과 같이 문자열 영역 좌측 하단 좌표 계산
- org.x = (img.width - text.width) / 2
- org.y = (img.height - text.height) / 2
4. 이벤트 처리
- waitKey()
- 키 입력을 확인하기 위해 사용하는 함수
- waitKey(int delay = 0);
- delay <= 0 이면 무한히 기다림
'Run > Computer Vision' 카테고리의 다른 글
[Computer Vision] 머신러닝 & OpenCV #1 머신러닝 개요, KNN (0) | 2023.10.11 |
---|---|
[Computer Vision] 영상 밝기와 명암비 조절 & 필터링 (0) | 2023.10.11 |
[Computer Vision] Mat 클래스 (0) | 2023.10.11 |
[Computer Vision] 기본 자료형 클래스 (0) | 2023.10.11 |
[Computer Vision] OpenCV 개요 및 설치 (0) | 2023.10.11 |