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 |