OpenCV学习笔记(一):如何绘图

时间:2022-09-05 00:35:08

由于网上关于如何配置VS的环境的文章已经很多了,所以在此不再赘述,直接进入正题;因为,在读研期间研究方向上需要计算机视觉的部分,所以开始学习OpenCV,从今天(03.12.2016)开始,我会时不时得把学习过程中的知识点记录下来。
编译环境说明:windows8.1 + opencv2.4.10 + VS2010

OpenCV提供了一些基本的绘图操作,比如画圆,画椭圆,画线,画矩形,在图像里插入文字等功能。

1.circle(圆)

1.1circle构造函数:

//! draws the circle outline or a solid circle in the image
CV_EXPORTS_W void circle(
CV_IN_OUT Mat& img, //图像
Point center, //圆心
int radius,//半径
const Scalar& color,//颜色
int thickness=1,//粗细
int lineType=8, //线型
int shift=0//移动
);

其中,必须提供的参数是:点坐标,圆心,半径,以及画线的颜色。

1.2circle(圆)demo

    Point center = Point(255,255);//圆心
int r = 100;//半径
//图像
Mat picture(500,500,CV_8UC3,Scalar(255,255,255));
//参数为 图像、 圆心、 半径、 颜色、粗细、线型
circle( picture, center, r, Scalar(0,0,0), 1, 8);
imshow("画板",picture);
waitKey(6000);

其可以把线的粗细设置为-1来画实心的图形。
OpenCV学习笔记(一):如何绘图
OpenCV学习笔记(一):如何绘图

2.ellipse(椭圆)

2.1ellipse构造函数

//! draws an elliptic arc, ellipse sector or a rotated ellipse in the image
CV_EXPORTS_W void ellipse(
CV_IN_OUT Mat& img, //图像
Point center, //圆心
Size axes,//轴的长度
double angle, //径向夹角(水平面到长轴的夹角)
double startAngle, //径向夹角(水平面到长轴的夹角)
double endAngle,//结束角度(长轴到结束点的夹角)
const Scalar& color, //颜色
int thickness=1,//粗细
int lineType=8, //线条的类型,见CVLINE的描述。
int shift=0//圆心坐标点和数轴的精度
);

2.2ellipse(椭圆)demo

ellipse(picture,center,Size( 250, 100 ),0,30,240,Scalar(0,0,0));

OpenCV学习笔记(一):如何绘图
函数cvEllipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。圆弧被ROI矩形所忽略。反走样弧线和粗弧线使用线性分段近似值。所有的角都是以角度的形式给定的。下面的图片将解释这些参数的含义。

Parameters of Elliptic Arc
OpenCV学习笔记(一):如何绘图

3.line(直线)

3.1line构造函数

//! draws the line segment (pt1, pt2) in the image
CV_EXPORTS_W void line(
CV_IN_OUT Mat& img, //图像
Point pt1, //起始点
Point pt2, //结束点
const Scalar& color,//颜色
int thickness=1, //粗细
int lineType=8, //线型
int shift=0//偏移
);

3.2line(直线)demo

    //画线
Point a = Point (100,100);
//参数为:图像、起始点、结束点、颜色、粗细、线型
line(picture,a,center,Scalar(255,0,0));
imshow("画板",picture);

OpenCV学习笔记(一):如何绘图


4.rectangle(矩形)

4.1rectangle构造函数

//! draws the rectangle outline or a solid rectangle with the opposite corners pt1 and pt2 in the image
CV_EXPORTS_W void rectangle(
CV_IN_OUT Mat& img,
Point pt1, //矩形的一个顶点。
Point pt2, //矩形对角线上的另一个顶点
const Scalar& color, //线条颜色。
int thickness=1,//组成矩形的线条的粗细程度。
//取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形
int lineType=8, //线型
int shift=0//坐标点的小数点位数
);

4.2rectangle(矩形)demo

draws the rectangle outline or a solid rectanglewith the opposite corners pt1 and pt2 in the image
通过对角线上的两个顶点绘制矩形

//为了方便展示什么叫做 根据对角线两个顶点绘制矩形
//现在把上面把绘画直线的用到的那两个【起始点】和【终点】作为矩形的两个对角点
//并把直线的颜色更改为 红色 对比显示
//画线
Point a = Point (100,100);
//参数为:图像、起始点、结束点、颜色、粗细、线型
line(picture,a,center,Scalar(0,0,255));
imshow("画板:直线",picture);

//画矩形
//参数为:承载的图像、顶点、对角点、颜色(这里是蓝色)、粗细、大小
rectangle(picture,a,center,Scalar(255,0,0));
imshow("画板:矩形",picture);

OpenCV学习笔记(一):如何绘图


5.putText(插入文字)

5.1putText构造函数

//! renders text string in the image
CV_EXPORTS_W void putText(
Mat& img, //图像
const string& text,//插入的文字
Point org,//文字的位置(文本框左下角)
int fontFace, //字体
double fontScale, //字体大小
Scalar color,//颜色
int thickness=1,
int lineType=8,
bool bottomLeftOrigin=false
);

5.2putText(插入文字)demo

//插入文字
//参数为图像,插入的文字,文字的位置(文本框左下角),字体,大小,颜色
string words= "XiDianCoder";

putText(
picture, words,
Point(picture.rows/2,picture.cols/4),
CV_FONT_HERSHEY_COMPLEX,
1,
Scalar(255, 0, 0)
);

imshow("画板:插入文字",picture);

OpenCV学习笔记(一):如何绘图


源码:http://download.csdn.net/detail/xidiancoder/9459429


仅供学习交流,如有错误,敬请指正,谢谢!!!