[OpenCV] 그리기, 이벤트 처리, 트랙바

zzwon1212·2023년 10월 26일
0

OpenCV

목록 보기
4/16
post-thumbnail

1. 그리기

  • 주요 함수

    그리기 방식세부 그리기 방식함수 이름
    선 그리기직선 그리기line()
    화살표 그리기arrowedLine()
    마커 그리기drawMarker()
    도형 그리기사각형 그리기rectangle()
    원 그리기circle()
    타원 그리기ellipse()
    다각형 그리기polylines(), fillPoly()
    문자열 출력하기문자열 출력하기putText()
    출력 문자열의 크기 계산getTextSize()
  • 아래 첫번째 사진은 원본 프레임이고, 두번째 사진은 line()putText()를 이용하여 선과 텍스트를 그려 넣은 프레임이다.

2. 이벤트 처리

  • waitKey(): 키보드 입력 대기

    • 밀리초 단위로 지정한 시간 동안 대기하며, 키가 눌리면 그 키의 아스키 코드값을 반환하고 키가 눌리지 않으면 -1을 반환한다.
    • 화살표나 함수키 등의 특수키는 waitKeyEx()를 사용
  • setMouseCallback(): 마우스 이벤트 처리를 위한 콜백 함수 등록

    • onMouse: 마우스 콜백 함수 이름. 아래와 같은 형식의 함수를 정의하여 인자로 지정해주자.

      typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata);
      • flags를 이용할 때는 ①과 같이 비트 연산으로 비교하자.
        flags & EVENT_FLAG_LBUTTON
        flags == EVENT_FLAG_LBUTTON
    • 아래는 마우스 콜백 함수를 이용해 마우스로 그림을 그린 사진이다. 마우스 이벤트는 빠르게 발생하는 것이 아니라서 사용자가 마우스를 빠르게 움직이면 띄엄띄엄 발생할 수도 있다. 그렇기 때문에 이벤트가 발생할 때 매번 점을 찍는 방법보다는, 이벤트가 발생하기 전 위치를 기록해두고 이전 포인트에서 현재 포인트까지 직선을 그리는 방법으로 더 부드러운 그림을 그릴 수 있다.

3. 트랙바

  • 영상 출력 창에 부착되어, 프로그램 동작 중에 사용자가 지정된 범위 안의 값을 선택할 수 있는 GUI(슬라이더 컨트롤)
  • createTrackbar(): 트랙바 생성 함수, 정상 동작하면 1을 반환하고 실패하면 0을 반환함.
    • int* value: 트랙바 위치 값을 받을 정수형 변수의 주소로, 보통은 전역 변수 형태의 정수값 변수를 하나 설정하고 그 주소를 지정한다.
    • onChange: 트랙바 위치를 변경할 때마다 호출될 콜백 함수 이름(함수의 포인터). 만약 NULL을 지정하면 콜백 함수는 호출되지 않고 value로 지정한 변수 값만 갱신됨.
      typedef vold (*TrackbarCallback)(int pos, void* userdata);
  • 아래는 트랙바를 이용해 픽셀값을 0단계부터 16단계까지 조절한 사진이다.

📙강의 - 강사 황선규

profile
JUST DO IT.

0개의 댓글