形状绘制主要函数
基础
点
定义一个点
Point(int x, int y)
Point pt1(20,30);
Point pt2;
pt2.x = 20;
pt2.y = 30;
Point pt = Point(10, 8);
Point2f:2維浮點數點類別,通常用於幾何計算,用法和Point雷同,只是x和y是浮點數。
Point3i、Point3f、Point3d代表3維點x、y、z,而成員型態分別為int、float、double。
画出来下面和圆形一起写
尺寸
Size:
尺寸類別,成員有width和height,分別表示寬和長(int型態),可用area()函式得到面積,以下為建構式最基本兩種賦值方法:
Size(int width, int height)
Size size1(150, 100);
Size size2;
size2.width = 150;
size2.height = 100;
int myArea = size2.area();
线
绘制连接两个点的线段。
void 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 行的类型。请参阅#LineTypes。
shift 点坐标中的小数位数。
函数cv :: arrowedLine在图像中的pt1和pt2点之间绘制一个箭头。
void arrowedLine(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
int thickness=1, int line_type=8, int shift=0, double tipLength=0.1);
img 图片。
pt1 箭头开始的点。
pt2 箭头指向的点。
color 线条颜色。
thickness 线条粗细。
line_type 行的类型。请参阅#LineTypes
shift 点坐标中的小数位数。
tipLength 箭头尖端相对于箭头长度的长度
矩形
创建一个矩形
Rect(int x, int y, int width, int height)
参数:
1、矩形左上角x坐标
2、矩形左上角y坐标
3、矩形的宽
4、矩形的高
Rect rect1(20,30,150,100);
Rect rect2;
rect2.x = 20;
rect2.y = 30;
rect2.width = 150;
rect2.height = 100;
int myRectArea = rect2.area();
计算矩形的面积
绘画一个矩形
void rectangle(InputOutputArray img, Point pt1, Point pt2,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数:
img 输入图片。
pt1 矩形的顶点。
pt2 与pt1相对的矩形的顶点。
color 矩形颜色或亮度(灰度图像)。
thickness 构成矩形的线条的粗细。 负值,如#FILLED,意味着该函数必须绘制一个填充矩形。
lineType 行的类型。
shift 点坐标中的小数位数。
void rectangle(InputOutputArray img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
和上面的区别在于用Rect 矩形类代替点
绘制线的类型
FILLED = -1,
LINE_4 = 4,//!<4连线
LINE_8 = 8,//!<8连线
LINE_AA = 16 //!<抗锯齿线
带角度的矩形
RotatedRect(const Point2f& center, const Size2f& size, float angle);
参数:
center 矩形质心。
size 矩形的宽度和高度。
angle 顺时针方向的旋转角度。 当角度为0°,90°,180°,270°等时,矩形变为右上角的矩形。
RotatedRect(const Point2f& point1, const Point2f& point2, const Point2f& point3);
RotatedRect的任何3个端点。 它们必须按顺序给出
圆
void circle(
cv::Mat& img, // 待绘制的图像
cv::Point center, // 圆心位置
int radius, // 圆的半径
const cv::Scalar& color, // 线条的颜色(RGB)
int thickness = 1, // 线宽
int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
int shift = 0 // 偏移量
)
如果将半径设定为0就表示一个点
椭圆
void 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 以度为单位的椭圆弧的结束角度。
color 椭圆颜色。
thickness 椭圆弧形轮廓的粗细,如果是正的。否则,这表明将绘制一个填充的椭圆扇区。
lineType 椭圆边界的类型。请参阅#LineTypes
shift 中心坐标和轴值的小数位数。
void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,
int thickness = 1, int lineType = LINE_8);
img 图片。
box 通过RotatedRect替代椭圆表示。这意味着函数绘制内接在旋转矩形中的椭圆。
color 椭圆颜色。
thickness 椭圆弧形轮廓的粗细,如果是正的。否则,这表明将绘制一个填充的椭圆扇区。
lineType 椭圆边界的类型。请参阅#LineTypes
判断一条直线是否在某个矩形内
bool clipLine( // 如果直线line任何一部分在矩形 'imgRect'内,则返回true
cv::Rect imgRect, // 要穿过的矩形
cv::Point& pt1, // 直线的第一个端点
cv::Point& pt2 // 直线的第二个端点
);
bool clipLine( // 如果直线line任何一部分在图像大小Size内,则返回true
cv::Size imgSize, // 图像的大小,相当于矩形的端点在(0,0)
cv::Point& pt1, // 直线的第一个端点
cv::Point& pt2 // 直线的第二个端点
);
绘制非封闭多边形即折线
void polyLines(
cv::Mat& img, // 待绘制的图像
const cv::Point** pts, // c风格的点序列的序列
int* npts, // 'pts[i]'中点的数目
int ncontours, // 'pts'中的序列数
bool isClosed, // 如果是true, 则连接首尾两点
//这个时候就是绘制多边形了
const cv::Scalar& color, // 线条的颜色(RGB)
int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
int shift = 0 // 偏移量
);
填充凸多边形
fillConvexPoly(Mat& img, const Point* pts, int npts, const Scalar& color, int lineType=8, int shift=0)
//注意:输入的多边形不能出现交叉,否则会出错。
img 图像
pts 指向单个多边形的指针数组
npts 多边形的顶点个数
color 多边形的颜色
LineType 组成多边形的线条的类型
shift 顶点坐标的小数点位数
Mat src = Mat::zeros(480,640,CV_8UC3);
src.setTo(255);
Point PointArray[4];
PointArray[0] = Point(50,10);
PointArray[1] = Point(300,12);
PointArray[2] = Point(350,250);
PointArray[3] = Point(9,250);
fillConvexPoly(src,PointArray,4,Scalar(0,0,0));
绘制实心凸多边形
fillPoly(InputOutputArray img, InputArrayOfArrays pts,
const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() );
img 图片。
pts 多边形数组,其中每个多边形表示为点数组。
color 多边形颜色。
lineType 多边形边界的类型。 请参阅#LineTypes
shift 顶点坐标中的小数位数。
offset 轮廓的所有点的可选偏移量。