1.绘制直线
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:线型
完整代码如下:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("../test.jpg");
Point p1(100, 100);
Point p2(1358, 50);
line(img, p1, p2, Scalar(33, 33, 133), 2);
//画第二条线
line(img, Point(300, 300), Point(258, 300), Scalar(89, 90, 90), 3);
imshow("drawlines", img);
imwrite("lines.jpg",img);
waitKey();
return 0;
}
效果:
2.绘制点和圆
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
参数列表如下:
- img:图像。
- center:圆心坐标。
- radius:圆形的半径。
- color:线条的颜色。
- thickness:如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
- line_type:线条的类型。见 cvLine 的描述
- shift:圆心坐标点和半径值的小数点位数。
完整代码如下:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
//画圆画点都是使用circle()函数来画,点就是圆,我们平常所说的圆只不过是半径大一点而已。
int main()
{
Mat img = imread("lol16.jpg");
//画空心点
Point p(20, 20);//初始化点坐标为(20,20)
circle(img, p, 2, Scalar(0, 255, 0)); //第三个参数表示点的半径,第四个参数选择颜色。这样子我们就画出了绿色的空心点
//这种初始化点的方式也可以
Point p2;
p2.x = 100;
p2.y = 100;
//画实心点
circle(img, p2, 3,Scalar(255,0,0),-1); //第五个参数我设为-1,表明这是个实点。
//画空心圆
Point p3(300, 300);
circle(img,p3,100,Scalar(0,0,255),3);//第五个参数我们调高点,让线更粗
//画实心圆
Point p4;
p4.x = 200;
p4.y = 200;
circle(img, p4, 100, Scalar(120, 120, 120), - 1);
imshow("drawcircle", img);
waitKey();
return 0;
}
效果如下:
3.绘制椭圆
void ellipse(Mat& img, Point center,Size axes, double angle, double startAngle, double endAngle, const Scalar& color,int thickness=1, int lineType=8, int shift=0)
参数列表如下:
- img:图像。
- center:椭圆圆心坐标。
- axes:轴的长度。
- angle:偏转的角度。
- start_angle:圆弧起始角的角度。
- end_angle:圆弧终结角的角度。
- color:线条的颜色。
- thickness:线条的粗细程度。
- line_type:线条的类型,见CVLINE的描述。
- shift:圆心坐标点和数轴的精度
完整代码如下:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("../test.jpg");
int thickness = 3;
int lineType = 8;
double angle = 0; //椭圆旋转角度
//第三个参数Size中的两个参数分别是横轴长、纵轴长。
//同理,thickness若是小于0,表示实心
ellipse(img,Point(600, 600),Size(450, 300),angle,0,360,Scalar(255, 255, 0),thickness,lineType);
imshow("drawellipse", img);
imwrite("drawellipse.jpg", img);
waitKey();
return 0;
}
4.绘制矩形
void rectangle(Mat& img,Rect rec, const Scalar&color, intthickness=1, intlineType=8,intshift=0 )
- img:图像。
- rec:表征矩形的位置和长宽。
- color:线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。
- thickness:组成矩形的线条的粗细程度。取负值时(如CV_FILLED)函数绘制填充了色彩的矩形。
- line_type:线条的类型。见cvLine的描述 shift:坐标点的小数点位数。
完整代码如下:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("llogo.jpg");
Rect r(250, 250, 120, 200);
rectangle(img, r, Scalar(0, 255, 255), 3);
imshow("drawrect", img);
waitKey();
return 0;
}
效果如下:
5.绘制多边形
void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed, CvScalar color, int thickness=1, int line_type=8, int shift=0 );
参数列表:
- img 图像。
- pts 折线的顶点指针数组。
- npts 折线的定点个数数组。也可以认为是pts指针数组的大小
- contours 折线的线段数量。
- is_closed 指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。
- color 折线的颜色。
- thickness 线条的粗细程度。
- line_type 线段的类型。参见cvLine。
- shift 顶点的小数点位数。
完整代码如下:
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("../test.jpg");
Point points[1][4];
points[0][0] = Point(100, 115);
points[0][1] = Point(255, 135);
points[0][2] = Point(140, 365);
points[0][3] = Point(100, 300);
//ppt[]要同时添加两个多边形顶点数组的地址头
const Point* pts[] = {points[0]};
//npts[]要定义每个多边形的定点数
int npts[] = {4};
polylines(img,pts,npts,1,true,Scalar(255),5,8,0);
namedWindow("Poly");
imshow("Poly", img);
imwrite("Poly.jpg", img);
waitKey();
fillPoly(img,pts,npts,1,Scalar(255),8,0,Point());
imshow("Poly", img);
imwrite("Poly2.jpg", img);
waitKey();
}
效果如下: