绘图功能参考:
opencv3.2帮助文档 / Drawing Functions板块
1、直线Line
函数原型:
void cv::line (
InputOutputArray img, //图像
Point pt1, //线的起点
Point pt2, //线的终点
const Scalar & color, //线的颜色
int thickness = 1, //线的粗细
int lineType = LINE_8, //线的类型
int shift = 0 //点坐标中小数位数
)
实例代码
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
Point p1 = Point(60, 50);
Point p2 = Point(250, 200);
line(srcImage, p1, p2, CV_RGB(255, 0, 0), 1);
imshow("效果图", srcImage);
waitKey();
return 0;
}
2、矩形Rectangle
函数原型:
void cv::rectangle (
InputOutputArray img, //图像
Point pt1, //矩形的一个顶点
Point pt2, //和上一个顶点相对的顶点
const Scalar & color, //线的颜色
int thickness = 1, //线的粗细
int lineType = LINE_8, //线的类型
int shift = 0 //点坐标中小数位数
)
实例代码
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
Point p1 = Point(60, 50);
Point p2 = Point(250, 200);
rectangle(srcImage, p1, p2, CV_RGB(255, 0, 0), 1);
imshow("效果图", srcImage);
waitKey();
return 0;
}
3、圆形Circle
函数原型:
void cv::circle (
InputOutputArray img, //图像
Point center, //圆心
int radius, //半径
const Scalar & color, //线的颜色
int thickness = 1, //如果是正数,则为线的粗细,如果为负数则填充圆的内部
int lineType = LINE_8, //线的类型
int shift = 0 ////点坐标中小数位数
)
实例代码
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
Point circle_center = Point(150, 150);
int circle_radius = 80;
circle(srcImage, circle_center, circle_radius, Scalar(255, 0, 0), 2); //Scalar( (b), (g), (r), 0 )
imshow("效果图", srcImage);
waitKey();
return 0;
}
4、椭圆Ellipse
函数原型:
void cv::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 //中心坐标和半轴的小数位数
)
实例代码
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
Point center = Point(150, 150);
Size axes = Size(150, 80);
double angle = 45;
//绘制0~360度,完整的椭圆
ellipse(srcImage, center, axes, angle, 0,360,Scalar(0, 0, 255), 1, LINE_AA);
//绘制0~180度,椭圆的一部分
ellipse(srcImage, center, axes, angle, 0,180,Scalar(0, 0, 255), 1, LINE_AA);
//RotatedRect m_ellipse;
//m_ellipse.center = center;
//m_ellipse.angle = angle;
//m_ellipse.size = axes;
//ellipse(srcImage, m_ellipse, Scalar(0, 0, 255),1 , LINE_AA);
imshow("效果图", srcImage);
waitKey();
return 0;
}
5、多边形Polygon
函数原型
void cv::polylines (
InputOutputArray img, //图像
InputArrayOfArrays pts, //点集
bool isClosed, //true为闭合,最后一个点和第一个点连起来
const Scalar & color, //线的颜色
int thickness = 1, //线的粗细
int lineType = LINE_8, //线的类型
int shift = 0 //点的坐标精度
)
polylines ()函数是用来画折线的,如果输入的点集是多边形的顶点集合,isClosed=true就可以绘制多边形
实例代码
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
vector<Point> pt;
pt.push_back ( Point(50, 50) );
pt.push_back ( Point(50, 120) );
pt.push_back ( Point(90, 160) );
pt.push_back ( Point(140, 240) );
pt.push_back ( Point(240, 70) );
polylines(srcImage ,pt ,1, CV_RGB(0, 255, 0), 2);
imshow("效果图", srcImage);
waitKey();
return 0;
}
6、绘制文字PutText
函数原型
void cv::putText (
InputOutputArray img, //图像
const String & text, //要显示的字符串
Point org, //图片中文本字符串的左下角
int fontFace, //字体类型
double fontScale, //字体大小
Scalar color, //颜色
int thickness = 1, //粗细
int lineType = LINE_8, //线的类型
bool bottomLeftOrigin = false //当TRUE时,图像原点位于左下角。否则,它在左上角
)
实例代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage(Size(300, 300), CV_8UC3, Scalar(0));
string str = "I am a student!";
putText(srcImage, str,Point(20,150), FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255), 1, LINE_AA);
imshow("效果图", srcImage);
waitKey();
return 0;
}