DevelopmentTool/OpenCV

[OpenCV] 도형 그리기

유제필 2022. 11. 17. 09:14

OpenCV 에선 사각형, 원, 다각형 등 도형에 관한 여러 가지 함수들을 제공한다.

rectangle();

void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
               int thickness = 1, int lineType = LINE_8, int shift = 0);
void rectangle(InputOutputArray img, Rect rec, const Scalar& color,
               int thickness = 1, int linetype = LINE_8, shift = 0);

img : 입출력 영상
pt1 : 사각형 꼭지점 좌표 (Point 객체)
pt2 : pt1과 대각 방향에 있는 사곽형 꼭지점 좌표 (Point 객체)
rec : 사각형 위치 정보 (Rect 객체)
color : 사각형 색상(밝기)
thickness : 사각형 외곽선 두께. 이 값이 음수(-1 또는 FILLED)이면 내부를 채운다.
lineType : 선 타입
shift : 그리기 좌표 값의 축소 비율 (오른쪽 비트 시프트 연산 >>)

 

rectangle() 함수는 사각형을 그리는 함수이다.

사각형을 그리는 방법은 2가지가 있다.

그림을 그릴 사각형 정보는 사각형의 대각 위치에 있는 두 꼭지점 좌표를 이용하거나,

Rect 클래스 타입의 객체를 이용하여 전달할 수 있다.

함수 인자 중 thickness, lineType, shift 인자는 기본 값을 가지고 있으므로 생략할 수 있다.

rectangle() 함수 예제 코드

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat img(480, 520, CV_8UC3, Scalar(255, 255, 255));

	rectangle(img, Rect(50, 50, 100, 50), Scalar(0, 0, 255), 2);
	rectangle(img, Rect(50, 150, 100, 50), Scalar(0, 128, 0), -1);

	imshow("img", img);

	waitKey(0);
}

circile();

void circile(InputOutputArray img, Point center, int radius, const Scalar& color,
             int thickness = 1, int lineType = LINE_8, int shift = 0);

img : 입출력 영상
center : 원의 중심
radius : 원의 반지름
color : 원 색상
thickness : 원 외곽선 두께. 이 값이 음수(-1 또는 FILLED) 이면 내부를 채운다.
lineType : 선 타입
shift : 그리기 좌표 값의 축소 비율 (오른쪽 비트 시프트 연산 >>)

circe() 함수는 원을 그리는 함수이다.

원을 그리기 위해서는 원의 중심점 좌표와 반지름을 지정해야 한다.

함수 인자 중 thickness, lineType, shift 인자는 기본 값을 가지고 있으므로 생략할 수 있다.

circle() 함수 예제 코드

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat img(480, 520, CV_8UC3, Scalar(255, 255, 255));

	circle(img, Point(300, 120), 30, Scalar(255, 0, 255), -1, LINE_AA);
	circle(img, Point(150, 100), 60, Scalar(50, 128, 255), 3, LINE_AA);


	imshow("img", img);

	waitKey(0);
}

ellipse();

void 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);

img : 입출력 영상
center : 타원의 중심
axes : 타원의 반지름. Size(x축_반지름, y축_반지름)
angle : 타원 회전 각도(x 축 기준으로 시계 방향)
startAngle : 타원 호의 시작 각도 (x 축 기준으로 시계 방향)
endAngle : 타원 호의 끝 각도 (x 축 기준으로 시계 방향)
color : 타원 색상
thickness : 타원 외곽선 두께. 이 값이 음수(-1 또는 FILLED) 이면 내부를 채운다.
lineType : 선 타입
shift : 그리기 좌표 값의 축소 비율 (오른쪽 비트 시프트 연산 >>)

 

ellipse() 함수는 다양한 형태의 타원 또는 타원의 일부인 호를 그릴 수 있는 함수이다.

타원의 크기는 axes 인자를 통해 지정하며, Size 자료형을 사용한다. x축 방향 타원의 반지름과 y축 방향의 반지름을 정한다.

angle 인자에 0이 아닌 값을 전달하면, 회전된 타원을 그릴 수 있다.

startAngle과 endAngle 인자를 적절하게 이용하면 호를 그리는 용도로 사용할 수 있다.

예를 들어, startAngle = 0, endAngle = 360을 지정하면 완전한 타원이 되고,

startAngle = 0, endAngle = 180을 지정하면 타원의 반에 해당하는 호를 그릴 수 있다.

함수 인자 중 thickness, lineType, shift 인자는 기본 값을 가지고 있으므로 생략할 수 있다.

ellipse() 함수 예제 코드

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat img(480, 520, CV_8UC3, Scalar(255, 255, 255));

	ellipse(img, Point(100, 100), Size(60, 30), 20, 0, 270, Scalar(0, 0, 0), -1, LINE_AA);
	ellipse(img, Point(300, 100), Size(100, 50), 20, 0, 360, Scalar(255, 50, 10), 2, LINE_AA);


	imshow("img", img);

	waitKey(0);
}

polylines();

void polylines(InputOutputArray img, InputOutputARrays pts, bool isClosed,
               const Scalar& color, int thickness = 1, int lineType = LINE_8, shift = 0);

img : 입출력 영상
pts : 다각형 외곽 점들의 좌표 배열. 주로 vector<Point> 타입
isClosed : 다각형이 닫혀 있는지를 나타내는 플래그. 이 값이 true이면 다각형의 마지막 꼭지점과 첫 번째 꼭지점을 잇는 직선을 추가로 그린다.
color : 선 색상
thickness : 선 두께. 이 값이 음수(-1 또는 FILLED)이면 내부를 채운다.
lineType : 선 타입
shift : 그리기 좌표 값의 축소 비율 (오른쪽 비트 시프트 연산 >>)

polylines() 함수는 다각형을 그릴 수 있는 함수이다.

다각형의 꼭지점 좌표를 전달해야 하며, 꼭지점 좌표는 보통 vector<Point> 자료형에 저장하여 전달한다.

polylines() 함수 예제 코드

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat img(480, 520, CV_8UC3, Scalar(255, 255, 255));

	vector<Point> pts;
	pts.push_back(Point(250, 250));
	pts.push_back(Point(300, 250));
	pts.push_back(Point(300, 300));
	pts.push_back(Point(350, 350));
	pts.push_back(Point(250, 350));

	polylines(img, pts, true, Scalar(255, 0, 255), 2);


	imshow("img", img);

	waitKey(0);
}

 

'DevelopmentTool > OpenCV' 카테고리의 다른 글

[OpenCV] 이벤트 처리 인터페이스  (0) 2022.11.18
[OpenCV] 문자열 출력  (0) 2022.11.18
[OpenCV] 직선 그리기  (0) 2022.11.17
[OpenCV] VideoWriter 클래스  (0) 2022.11.17
[OpenCV] VideoCapture 클래스  (0) 2022.11.17