728x90
line() 함수 : 직선 그리기 함수
arrowedLine() 함수 : 화살표 직선 그리기 함수
drawMarker() 함수 : 직선을 사용한 모양 마커 그리기 함수
void drawLines()
{
Mat img(400, 400, CV_8UC3, Scalar(255, 255, 255));
//line(입출력 영상, Point(시작점x, 시작점y), Point(끝점x, 끝점y), Scalar(선 색상), 선 두께)
line(img, Point(50, 50), Point(200, 50), Scalar(0, 0, 255));
line(img, Point(50, 100), Point(200, 100), Scalar(255, 0, 255), 3);
line(img, Point(50, 150), Point(200, 150), Scalar(255, 0, 0), 10);
//line(입출력 영상, Point(시작점x, 시작점y), Point(끝점x, 끝점y), Scalar(선 색상), 선 두께, 선 타입)
//LINE_4 -> 4방향 연결, LINE_8 -> 8방향 연결, LINE_AA -> 안티에일리어싱
line(img, Point(250, 50), Point(350, 100), Scalar(0, 0, 255), 1, LINE_4);
line(img, Point(250, 70), Point(350, 120), Scalar(255, 0, 255), 1, LINE_8);
line(img, Point(250, 90), Point(350, 140), Scalar(255, 0, 0), 1, LINE_AA);
//arrowedLine(입출력 영상, Point(시작점x, 시작점y), Point(끝점x, 끝점y), Scalar(선 색상), 선 두께)
arrowedLine(img, Point(50, 200), Point(150, 200), Scalar(0, 0, 255), 1);
arrowedLine(img, Point(50, 250), Point(350, 250), Scalar(255, 0, 255), 1);
arrowedLine(img, Point(50, 300), Point(350, 300), Scalar(255, 0, 0), 1, LINE_8, 0, 0.05);
//drawMarker(입출력 영상, Point(시작점x, 시작점y), Point(끝점x, 끝점y), Scalar(선 색상), 마커 종류, 마커 크기, 선 두께, 선 타입)
drawMarker(img, Point(50, 350), Scalar(0, 0, 255), MARKER_CROSS);
drawMarker(img, Point(100, 350), Scalar(0, 0, 255), MARKER_TILTED_CROSS, 30);
drawMarker(img, Point(150, 350), Scalar(0, 0, 255), MARKER_STAR, 20, 3);
drawMarker(img, Point(200, 350), Scalar(0, 0, 255), MARKER_DIAMOND, 20, 1, LINE_4);
drawMarker(img, Point(250, 350), Scalar(0, 0, 255), MARKER_SQUARE, 20, 1, LINE_8);
drawMarker(img, Point(300, 350), Scalar(0, 0, 255), MARKER_TRIANGLE_UP, 20, 1, LINE_AA);
drawMarker(img, Point(350, 350), Scalar(255, 0, 0), MARKER_TRIANGLE_DOWN);
imshow("img", img);
waitKey();
destroyAllWindows();
}
rectangle() 함수 : 사각형을 그리는 함수, Rect 함수를 이용해 전달 가능
circle() 함수 : 원을 그리는 함수
ellipse() 함수 : 타원을 그리는 함수
polylines() 함수 : 다각형을 그리는 함수
void drawPolys()
{
Mat img(400, 400, CV_8UC3, Scalar(255, 255, 255));
//rectangle(입출력 영상, Rect(사각형 꼭짓점 좌표), Scalar(사각형 색상), 사각형 외곽선 두께, 선 타입)
//사각형 외곽선 두께의 값이 음수(FILLED)이면 안을 채운다
rectangle(img, Rect(50, 50, 100, 50), Scalar(0, 0, 255), 2);
rectangle(img, Rect(50, 150, 100, 50), Scalar(0, 0, 128), -1);
//rectangle(입출력 영상, Point(원의 중심 좌표), 원의 반지름, Scalar(원 색상), 원 외곽선 두께, 선 타입)
circle(img, Point(300, 120), 30, Scalar(255, 255, 0), -1, LINE_AA);
circle(img, Point(300, 120), 60, Scalar(255, 0, 0), 3, LINE_AA);
//ellipse(입출력 영상, Point(타원의 중심 좌표), Size(타원의 반지름), 타원 회전 각도, 타원 호의 시작 각도, 타원 호의 끝 각도, Scalar(타원 색상), 타원 외곽선 두께, 선 타입)
ellipse(img, Point(120, 300), Size(60, 30), 20, 0, 270, Scalar(255, 255, 0), FILLED, LINE_AA);
ellipse(img, Point(120, 300), Size(100, 50), 20, 0, 360, Scalar(0, 255, 0), 2, LINE_AA);
//polylines(입출력 영상, pts(다각형 외곽 점들의 좌표 배열), 다각형 개패 유무, Scalar(다각형 색상), 선 두께, 선 타입)
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, 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();
destroyAllWindows();
}
putText() 함수 : 정해진 폰트로 문자열 출력
getTextSize() 함수 : 문자열 출력을 위해 필요한 사각형 영역 크기를 가늠할 수 있는 함수, 문자열이 한쪽으로 치우치지 않게 배치 가능
void drawText1()
{
Mat img(500, 800, CV_8UC3, Scalar(255, 255, 255));
//putText(입출력 영상, 출력할 문자열, Point(문자열을 출력할 좌측 하단 좌표), 폰트 종류, 폰트 크기, Scalar(문자열 색상))
putText(img, "FONT_HERSHEY_SIMPLEX", Point(20, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 0, 255));
putText(img, "FONT_HERSHEY_PLAIN", Point(20, 100), FONT_HERSHEY_PLAIN, 1, Scalar(0, 0, 255));
putText(img, "FONT_HERSHEY_DUPLEX", Point(20, 150), FONT_HERSHEY_DUPLEX, 1, Scalar(0, 0, 255));
putText(img, "FONT_HERSHEY_COMPLEX", Point(20, 200), FONT_HERSHEY_COMPLEX, 1, Scalar(255, 0, 0));
putText(img, "FONT_HERSHEY_TRIPLEX", Point(20, 250), FONT_HERSHEY_TRIPLEX, 1, Scalar(255, 0, 0));
putText(img, "FONT_HERSHEY_COMPLEX_SMALL", Point(20, 300), FONT_HERSHEY_COMPLEX_SMALL, 1, Scalar(255, 0, 0));
putText(img, "FONT_HERSHEY_SCRIPT_SIMPLEX", Point(20, 350), FONT_HERSHEY_SCRIPT_SIMPLEX, 1, Scalar(255, 0, 255));
putText(img, "FONT_HERSHEY_SCRIPT_COMPLEX", Point(20, 400), FONT_HERSHEY_SCRIPT_COMPLEX, 1, Scalar(255, 0, 255));
putText(img, "FONT_HERSHEY_COMPLEX | FONT_ITALIC", Point(20, 450), FONT_HERSHEY_COMPLEX | FONT_ITALIC, 1, Scalar(255, 0, 0));
imshow("img", img);
waitKey();
destroyAllWindows();
}
void drawText2()
{
Mat img(200, 640, CV_8UC3, Scalar(255, 255, 255));
const String text = "Hello, OpenCV";
int fontFace = FONT_HERSHEY_TRIPLEX;
double fontScale = 2.0;
int thickness = 1;
//getTextSize(출력할 문자열, 폰트 종류, 폰트 크기, 문자열 선두께, 가장 하단의 텍스트 위치를 기준으로 하는 기준선의 y 좌표)
Size sizeText = getTextSize(text, fontFace, fontScale, thickness, 0);
Size sizeImg = img.size();
//sizeText와 sizeImg 크기 정보를 이용하여 문자열을 출력할 좌표 계산
Point org((sizeImg.width - sizeText.width) / 2, (sizeImg.height + sizeText.height) / 2);
//실제 문자열 출력
putText(img, text, org, fontFace, fontScale, Scalar(255, 0, 0), thickness);
//문자열을 감싸는 사각형 영역을 그림
rectangle(img, org, org + Point(sizeText.width, -sizeText.height), Scalar(0, 255, 0), 1);
imshow("img", img);
waitKey();
destroyAllWindows();
}
728x90
'런닝머신 (ML)' 카테고리의 다른 글
[컴퓨터 비전 & 머신러닝] OpenCV 데이터 파일 출력 (0) | 2023.03.29 |
---|---|
[컴퓨터 비전 & 머신러닝] 이벤트 처리 (0) | 2023.03.27 |
[컴퓨터 비전 & 머신러닝] 카메라와 동영상 파일 다루기 (0) | 2023.03.23 |
[컴퓨터 비전 & 머신러닝] InputArray와 OutputArray 클래스 (0) | 2023.03.20 |
[컴퓨터 비전 & 머신러닝] Vec과 Scalar 클래스 (0) | 2023.03.20 |