opencv学习笔记(八)绘制图形和文字

博客主要介绍了计算机视觉中常用图形相关API,包括直线、椭圆、矩形、圆形、多边形的绘制以及文字添加的API参数解释,还提及了代码实现和结果展示,为计算机视觉图形绘制提供了详细的技术参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.常用图形相关API解释(一般都有重载,下面只介绍每个其中一种)

(1)直线:void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

img: 要绘制线段的图像。

pt1::线段的起点。pt2: 线段的终点。

color::线段的颜色,通过一个Scalar对象定义。

thickness: 线条的宽度。

lineType: 线段的类型。可以取值8, 4, 和CV_AA, 分别代表8邻接连接线,4邻接连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。

shift::坐标点小数点位数。

(2)椭圆:void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle, double start_angle, double end_angle, CvScalar color, int thickness=1, int line_type=8, int shift=0 );

img:图像。

center:椭圆圆心坐标。

axes:轴的长度。

angle:偏转的角度。

start_angle:圆弧起始角的角度。.

end_angle:圆弧终结角的角度。

color:线条的颜色。

thickness:线条的粗细程度。

line_type:线条的类型,一般用LINE_8。

shift:圆心坐标点和数轴的精度。

3.矩形:void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )

img:写入图像

rec:矩形样式

color:颜色

thickness:线条的粗细程度。

line_type:线条的类型,一般用LINE_8。

其中Rect为:void Rect(int x,int y,int width,int height)

x:起始点横坐标

y:起始点纵坐标

width:矩形宽度 

height:矩形高度

4.圆形:void circle(CV_IN_OUT Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, int shift=0); 

img:输入图像,单通道多通道都可以

center:画圆的圆心坐标

radius:圆的半径

color:为设定圆的颜色 

thickness:为设置圆线条的粗细,值越大则线条越粗,为负数则是填充效果

5.多边形:用于一个单独被多边形轮廓所限定的区域内进行填充。函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,CvScalar color, int line_type=8, int shift=0 );

img:图像

pts:指向多边形的数组指针

npts:多边形的顶点个数的数组

contours:组成填充区域的线段的数量

color:多边形的颜色

line_type:组成多边形的线条的类型

shift:顶点坐标的小数点位数

6.添加文字:void putText( Mat& img, const string& text, Point org, int fontFace,double fontScale,Scalar color, int thickness=1, int lineType=8 );

img:写入图片

text:写入文字,字符串

org: 第一个字符左下角坐标

fontFace:字体类型,FONT_HERSHEY_SIMPLEX ,FONT_HERSHEY_PLAIN ,FONT_HERSHEY_DUPLEX 等

fontScale:字体大小

color:字体颜色 

thickness:字体粗细

2.代码实现

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;

Mat src;
void MyLine();//线条
void MyRect();//矩形
void MyEllipse();//椭圆
void MyCircle();//圆形
void MyPolygon();//多边形

int main()
{
	char *title = "start Image";
	src = imread("D:/demo.jpg");
	if (src.empty())
	{
		cout << "无法打开图像文件!" << endl;
		return -1;
	}
	MyLine();
	MyRect();
	MyEllipse();
	MyCircle();
	MyPolygon();
	putText(src, "hello Opencv!", Point(150, 150), CV_FONT_HERSHEY_COMPLEX, 1.0, Scalar(125, 128, 255), 2, 8);
	namedWindow(title, CV_WINDOW_AUTOSIZE);
	imshow(title, src);
	//RandomLineDemo();
	waitKey(0);
	return 0;
}
void MyLine()
{
	Point p1(100, 100);
	Point p2;
	p2.x = 200;
	p2.y = 200;
	Scalar color = Scalar(255, 0, 0);
	line(src, p1, p2, color, 5, LINE_8);
}
void MyRect()
{
	Rect rect = Rect(100, 100, 100,100);
	Scalar color = Scalar(0, 0, 255);
	rectangle(src,rect,color,5,LINE_8);
}
void MyEllipse()
{
	Scalar color = Scalar(0, 255, 0);
	ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 4, LINE_8);//90,0,360分别表示倾斜度、起始终止角度
}
void MyCircle()
{
	Scalar color = Scalar(255, 255, 255);
	Point center = Point(src.cols / 2, src.rows / 2);
	circle(src, center, 150, color, 4, LINE_AA);
}
void MyPolygon()//参数复杂
{
	Point pts[1][5];
	pts[0][0] = Point(60, 100);
	pts[0][1] = Point(500, 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 };
	Scalar color = Scalar(255, 50, 255);
	fillPoly(src,ppts,npt,1,color,8);
}

3.结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值