[Computer Vision] OpenCV 주요 기능

2023. 10. 11. 00:07Run/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

 

LINE_4 (위아래 연결) / LINE_8 (대각선 연결) / LINE_AA (부드러움)

 

  • 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 이면 무한히 기다림