728x90
반응형
C++에서 opencv를 이용해 이미지에 선, 원 등 다양한 도형을 그리는 방법입니다.
1.선 그리기
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat imageLine = image.clone();
Point pointA(200,80);
Point pointB(450, 80);
line(imageLine, pointA, pointB, color=Scalar(255,255,0), thickness=3, 8, 0);
imwrite("line_image.jpg", imageLine);
return 0;
}
=> line(Input Output array, pt1, pt2, scalar(B,G,R), thickness, lineType, shift)
lineType은 line 안을 채울지 등에 대한 값이며 shift는 무조건 0으로 세팅하면 됩니다.

2. 원 그리기
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat circle_image = image.clone();
Point circle_center(415,190);
int radius = 100;
circle(circle_image, circle_center, radius, Scalar(0,255, 0), 3, 8, 0);
//안이 채워진 원 그리기
circle(circle_image, circle_center, radius, Scalar(0,255, 0), -1, 8, 0);
imwrite("cricle_image.jpg", circle_image);
return 0;
}


3. 사각형 그리기
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat rect_image = image.clone();
Point start_point(300,115);
Point end_point(475, 225);
rectangle(rect_image, start_point, end_point, Scalar(0,0,255), 3, 8, 0);
imwrite("rect_image.jpg", rect_image);
return 0;
}

4. 타원 그리기
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat imageEllipse = image.clone();
Point ellipse_center(415,190);
Point axis1(100, 50);
Point axis2(125, 50);
ellipse(imageEllipse, ellipse_center, axis1, 0, 0, 360, Scalar(255, 0, 0), 3, 8, 0);
ellipse(imageEllipse, ellipse_center, axis2, 90, 0, 360, Scalar(0, 0, 255), 3, 8, 0);
imwrite("ellipse_image.jpg", imageEllipse);
return 0;
}

4-1. 반원 반만 채우기
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat halfEllipse = image.clone();
Point ellipse_center(415,190);
Point axis1(100, 50);
ellipse(halfEllipse, ellipse_center, axis1, 0, 180, 360, Scalar(255, 0, 0), 3, 8, 0);
ellipse(halfEllipse, ellipse_center, axis1, 0, 0, 180, Scalar(0, 0, 255), -2, 8, 0);
imwrite("ellipse_image.jpg", halfEllipse);
return 0;
}

5. text 삽입
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat image =imread("../test.jpg");
Mat imageText = image.clone();
putText(imageText, "A beautiful flower!~", Point(50, 350), FONT_HERSHEY_COMPLEX, 1.5, Scalar(250, 250, 100));
imwrite("text_image.jpg", imageText);
return 0;
}

[참고자료]
728x90
반응형
'OpenCV' 카테고리의 다른 글
| [OpenCV] C++ OpenCV Image Thresholding (0) | 2026.02.09 |
|---|---|
| [OpenCV] C++ OpenCV / Image Filtering Using Convolution (0) | 2025.12.05 |
| [OpenCV] C++ OpenCV 이미지 다루기 기초 (0) | 2025.11.12 |
| [OpenCV] C++ OpenCV 설치 (with Linux) (0) | 2025.11.06 |
| [OpenCV] OpenCV dnn을 이용해 딥러닝 모델 사용하기 (1) | 2024.02.08 |