본문 바로가기

# 미사용/OpenCV

[OpenCV] 기본도형 그리기


 기본 도형

기본 도형의 종류

  • 직선

  • 사각형

  • 타원

  • 텍스트



 선의 종류 (LINE_TYPE)

기본 도형을 이루는 선의 종류

FILLED    꽉찬 도형
LINE_4    4방향 연결선
LINE_8    8방향 연결선 (기본값)
LINE_AA   안티 에일리싱이 적용된 선


figure )




 직선 그리기

//! 기본 색상 및 하얀색 이미지 생성.
const Scalar black(0, 0, 0);
const Scalar white(255, 255, 255);
const string title = "canvas";
Mat image = Mat(Size(500, 250), CV_8UC3, white);


//! 직선 그리기.
Point srt(10, 10);
Point end(150, 150);
Scalar color = black;
int thickness = 1;
int line_type = LINE_AA;
line(image, srt, end, color, thickness, line_type);

output)





 사각형 그리기

//! 사각형 그리기.
Point top_left(10, 10);
Point btm_right(150, 150);
Scalar color = black;
int thickness = 2;
rectangle(image, top_left, btm_right, color, thickness, LINE_AA);
rectangle(image, top_left/2, btm_right/2, color, FILLED);

output)





 원 그리기

//! 원 그리기.
Point center(150, 150);
Scalar color = black;
int radius = 50;
int thickness = 2;
circle(image, center, radius, color, thickness, LINE_AA);
circle(image, center/2, radius/2, color, FILLED);

output )





 타원 그리기

concept figure)

opencv Ellipse에 대한 이미지 검색결과

[출처]  네이버 블로그 - JINSOL KIM


//! 타원 그리기.
Point center(150, 150);
Scalar color = black;
int thickness = 2;
int x_radius = 100;      //! 타원 x축 반지름
int y_radius = 75;       //! 타원 y축 반지름
double ell_angle = 30;   //! 타원 각도
double srt_angle = 0;    //! 호 시작 각도
double end_angle = 360;  //! 호 종료 각도


ellipse(
    image, 
    center, 
    Size(x_radius, y_radius), 
    ell_angle, srt_angle, end_angle, 
    color, thickness, LINE_AA);

ellipse(
	image, 
	center/2, 
	Size(x_radius, y_radius)/2, 
	ell_angle/2, srt_angle/2, end_angle/2, 
	color, FILLED);

ellipse(
	image, 
	center/4, 
	Size(x_radius, y_radius)/4, 
	ell_angle/4, srt_angle/4, end_angle/4, 
	color, thickness, LINE_AA);

output )





 텍스트 쓰기

텍스트의 시작점은 왼쪽 하단이라는 것에 주의하자.

한글을 출력하려면 구글에 떠돌아다니는 한글출력 코드를 사용하자.

//! 텍스트 그리기.
Point btm_left(150, 150);
Scalar color = black;
int fontFace = FONT_HERSHEY_SIMPLEX;    //! 사용할 폰트의 상수 값.
double fontScale = 1.5;    //! 확대비율
int thickness = 2;
putText(image,
        "Hello, World!",
        btm_left,
        fontFace, fontScale,
        color, thickness, LINE_AA);

//! btm_left?
circle(image, btm_left, 10, black);

output )