作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
void circle(InputOutputArray img, Point center, int radius,
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, int shift = 0);
void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,
int thickness = 1, int lineType = LINE_8);
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void DrawCircle(cv::Mat mask,const cv::Point2i ¢er, int radius,const cv::Scalar &color, int thickness);
void DrawRect(cv::Mat mask, const cv::Rect &rect, const cv::Scalar &color, int thickness);
void DrawEllipse(cv::Mat mask, const cv::RotatedRect &ellipse, const cv::Scalar &color, int thickness);
int main()
{
cv::Mat src = imread("test.jpg");
cv::Mat result = src.clone();
DrawCircle(result, cv::Point(src.cols / 2, src.rows / 2), 150, Scalar(0, 0, 255), 16);
DrawRect(result, cv::Rect(100, 50, 1200, 1000), Scalar(0, 255, 255), 16);
DrawEllipse(result, cv::RotatedRect(cv::Point(src.cols / 2, src.rows / 2),cv::Size(300,200),135), Scalar(255, 255, 255), 16);
imshow("original", src);
imshow("result", result);
waitKey(0);
return 0;
}
// 绘制圆形
void DrawCircle(cv::Mat mask,const cv::Point2i ¢er, int radius,const cv::Scalar &color, int thickness)
{
cv::circle(mask, center, radius, color, thickness);
}
// 绘制矩形
void DrawRect(cv::Mat mask,const cv::Rect &rect, const cv::Scalar &color, int thickness)
{
cv::rectangle(mask, rect, color, thickness);
}
// 画椭圆
void DrawEllipse(cv::Mat mask,const cv::RotatedRect &ellipse,const cv::Scalar &color, int thickness)
{
cv::ellipse(mask, ellipse, color, thickness);
}
图形绘制是图像处理中常用的功能之一,圆形和矩形没什么好说的。如图2所示,椭圆创建有三个参数,中心同圆一样,尺寸是全长轴和全短轴,注意不是半长,旋转的坐标系同Mat坐标系一样,往下往右为正,所以旋转135°就是图中的样子。
写这篇文章是为了后面绘制复杂图形做铺垫,如圆端矩形、圆角矩形、多边形、同心圆等等。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
联系客服