OpenCV绘制基本几何图形
一、概述
案例:使用OpenCV绘制线、矩形、椭圆、圆形、多边形、文本(不支持绘制中文)
1.绘制线:
line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
img:在哪里绘制线
pt1:起始点
pt2:终止点
color:线的颜色
thickness:线条的宽度
lineType:线段的类型。可以取值LINE_8, LINE_4, 和CV_AA, 分别代表8邻接连接线,4邻接连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。
shift:坐标小数点位,默认0就行
2.绘制矩形
rectangle(InputOutputArray img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
img:在哪里绘制矩形
rec:矩形坐标
color:线条颜色
thickness:线宽
lineType:同上面线段
ps:后三个参数可以不填写,直接默认就行
3.绘制一个椭圆
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:椭圆尺寸(长短轴)
angle:旋转角度(顺时针方向)
startAngle:绘制的其实角度
endAngle:绘制的终止角度
后面的参数同上
4.绘制一个圆
circle(InputOutputArray img, Point center, int radius,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
img:在哪里绘制
center:中心点坐标
其他参数同上
5.绘制多边形
fillPoly(InputOutputArray img, const Point** pts,
const int* npts, int ncontours,
const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() );
img:绘制在哪里
pts:多边形顶点集合
npts:要绘制的多边形顶点数目
ncontours:要绘制的多边形数量
其他参数解释同上
7.绘制文本
putText( InputOutputArray img, const String& text, Point org,
int fontFace, double fontScale, Scalar color,
int thickness = 1, int lineType = LINE_8,
bool bottomLeftOrigin = false );
img:要绘制在哪里
text:要绘制的文本
org:第一个字符左下角坐标
fontFace:字体类型,FONT_HERSHEY_SIMPLEX ,FONT_HERSHEY_PLAIN ,FONT_HERSHEY_DUPLEX
fontScale:字体大小,我们设置为2号
其他参数解释同上
二、代码示例
Mat src = Mat::zeros(500,500,CV_8UC3);//创建一个单通道黑色图片 //绘制一条直线 line(src,Point(0,0),Point(500,500),Scalar(125,125,125),1,LINE_AA); //绘制一个矩形 Rect rect = Rect(125, 125, 225, 225); Scalar color = Scalar(125,125,125); rectangle(src,rect,color,2,LINE_8); //绘制一个椭圆 ellipse(src,Point(250,250),Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8); //绘制一个圆 circle(src,Point(250,250),100,color,1,LINE_AA); //绘制多边形并对其进行填充 Point pts[1][5]; pts[0][0] = Point(100, 100); pts[0][1] = Point(100, 200); pts[0][2] = Point(200, 200); pts[0][3] = Point(200, 100); pts[0][4] = Point(100, 100); const Point* ppts[] = { pts[0] }; int npt[] = { 5 }; fillPoly(src, ppts, npt, 1, color, 8); //绘制文本 putText(src,"hello OpenCV",Point(100,100),FONT_HERSHEY_COMPLEX, 1.0, Scalar(12, 23, 200), 3, 8); QImage qImage = QImage(src.data,src.cols,src.rows,src.step,QImage::Format_BGR888); label->setFixedSize(QSize(qImage.width(),qImage.height())); label->setScaledContents(true); label->setPixmap(QPixmap::fromImage(qImage));
三、图片
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库