ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • git bash
  • PriorityQueue
  • stack
  • 안드로이드
  • React
  • entrySet
  • 깃
  • Arrays.sort()
  • getOrDefault
  • java
  • 코틀린
  • 백준
  • git
  • 스택/큐
  • 프로그래머스
  • 프로그래머스 Lv.2
  • compareTo()
  • Queue
  • sort
  • Android
  • BFS
  • Comparator
  • dfs
  • greedy
  • kotiln
  • reactjs
  • 깃허브
  • DP
  • 해시
  • HashMap

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Computer Vision

[OpenCV] Drawing 함수(Drawing Function)

2020. 1. 11. 21:06
  • 목표

openCV 활용해서 영상 내에 다양한 도형 그리기 및 글자 쓰기

 

  • Rectangle (사각형그리기)

void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

- Pt1, Pt2 : 사각형을 구성하는 꼭지점 (pt2는 pt1의 반대방향에 있는것)

- Color : 색상

- thickness : 두께

- lineType: 선의 타입

- shift : 사각형을 정교하게 그리고 싶을 때 사용함

 

void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

Rect라는 데이터 구조를 이용. Rect(x_LT, y_LT, width, height)

 

int main(){
    Mat image = imread("lena.jpg");
    Rect rect = Rect(10, 10, 100, 100); // LT position, width, height
    rectangle(image, rect, Scalar(255, 0, 0), 4, 8, 0);
    imshow("image",image);
    waitKey(0);
    return 0;
}

 

  • Line/Circle (선/원 그리기)

void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

- pt1, pt2 : 선의 양 끝점

- lineType: 선의타입. (Ex. 8(or omitted): 8-connected line.  4: 4-connected line. CV_AA: antialiased line)

 

int main(){
    Mat image = imread("lena.jpg");
    Point p1(25, 25), p2(100, 50);
    line(image, p1, p2, Scalar(255, 0, 0), 3, 8, 0);
    imshow("image",image);
    waitKey(0);
    return 0;
}

 

void circle(Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

- center : 원의 중점

- radius : 원의 반지름

 

 

  • Polygon (다각형 그리기)

void fillPoly(Mat& img, const Point** pts, const int* npts, int ncontours, const Scalar& color, int lineType=8, int shift=0, Point offset=Point())

다각형을 그리고 그 안을 255,0으로 채우는 함수

pts : 각각의 꼭지점들을 포함하고 있는 2차원 array

npts : 각각의 꼭지점들이 몇개가 있는가 설정해주는 1차원 array(여러개의 다각형을 동시에 그릴 수 있다.)

ncontours : 특정한 영역을 둘러싸고있는 궤적, 둘레(contour)의 개수

shift, offset : 보다 정교하게 그리기 위해있는 옵션

 

int main() {
    Mat image = Mat::zeros(400, 400, CV_8UC3); //unsinged char, 3-channel
    int w = 400;
    
    Point trapezoid[1][4]; // 2차원 array. 점들(다각형)의 위치를 넣어줌
    trapezoid[0][0] = Point(w*2 / 6, w / 4);
    trapezoid[0][1] = Point(w*4 / 6, w / 4);
    trapezoid[0][2] = Point(w*5 / 6, w*3 / 4);
    trapezoid[0][3] = Point(w / 6, w*3 / 4);
    
    const Point* ppt[1] = { trapezoid[0] }; // trapezoid값 받아옴.
    int npt[] = { 4 };
    
    fillPoly(image, ppt, npt, 1, Scalar(255, 255, 255), 8); // 하나의 도형만 그리는 것이기 때문에 ncontours= 1
    // Scalar(255, 255, 255) -> 흰색으로 채움
    imshow("image", image);
    
    waitKey(0);
}

 

 

  • Write text 

void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false

org : text string이 위치할 위치 설정

글체(fontface), 크기(fontscale), 색상(color), 두께(thickness), 선의타입(lineType) 등으로 구성

 

String cv::format(const char *fmt, …)

mat frame마다 다른 text를 적고싶은 경우에 사용하는 format()함수

printf랑 유사하게 text string을 리턴해줌.

 

int main() {
    // Create black empty images
    Mat image = Mat::zeros(400, 600, CV_8UC3);
    int w = image.cols; // number of columns. 이미지의 너비
    int h = image.rows; // 이미지의 높이
    putText(image, format("width: %d, height: %d", w, h), // text string이 들어갈 위치에 format()함수 이용. 함수내부가 pirntf랑 형식 똑같음
    Point(50, 80), FONT_HERSHEY_SIMPLEX, 1,
    Scalar(0, 200, 200), 4); // B = 0, G, R 각각 400 -> 노랑
    imshow("image", image);
  
  	waitKey(0);
    return(0);
}

 

이 게시물은 한동대학교 황성수 교수님의 컴퓨터비전 강의를 공부하며 정리한 내용입니다.

'Computer Vision' 카테고리의 다른 글

[OpenCV] 밝기값 변환(Intensity Transformation)  (0) 2020.01.18
[OpenCV] 메모리 관리 및 픽셀 액세스(Memory Management/Pixel Access)  (0) 2020.01.11
[OpenCV] Mat 연산자(Mat operator)  (0) 2020.01.11
[OpenCV] Open CV 기초  (0) 2020.01.09
[컴퓨터 비전] 색공간의 이해  (0) 2020.01.09
    'Computer Vision' 카테고리의 다른 글
    • [OpenCV] 밝기값 변환(Intensity Transformation)
    • [OpenCV] 메모리 관리 및 픽셀 액세스(Memory Management/Pixel Access)
    • [OpenCV] Mat 연산자(Mat operator)
    • [OpenCV] Open CV 기초
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바