Learning OpenCV 绘图

win7+VS2013+OpenCV2.4.9

一、直线

绘制直线的函数:

void cvLine(
CvArr* img,//绘图载体,一般是 IplImage*
CvPoint pt1,//起始点
CvPoint  pt2,//终止点
CvScalar color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
int  thickness=1,//线宽
int  line_type=8,//线型,8连通或4连通
int  shift=0//顶点坐标小数点位数
);
二、矩形

绘制矩形的函数:

void cvRectangle(
CvArr*  img,//绘图载体,一般是 IplImage*
CvPoint  pt1,//左上角起始点
CvPoint  pt2,//右下角起始点
CvScalar  color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
int  thickness = 1,//线宽
int  line_type=8,//线型,8连通或4连通
int shift=0//顶点坐标小数点位数
);
三、圆形

绘制圆形的函数:

void cvCircle (
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvPoint 	center,//圆心坐标
	int 		radius,//半径长度(像素单位)
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		thickness = 1,//线宽
	int 		line_type=8,//线型,8连通或4连通
	int		shift=0//顶点坐标小数点位数
);

四、椭圆

1、绘制椭圆的函数:

void cvEllipse(
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvPoint 	center,//圆心坐标
	CvSize 		axes,//长半轴和短半轴长度
	double 		angle,//相对于水平轴偏角,顺时针为正
	double		start_angle,//起始角度,一般为0
	double 		end_angle,//终止角度,一般为360
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		thickness = 1,//线宽
	int 		line_type = 8,//线型,8连通或4连通
	int		shift=0//顶点坐标小数点位数
);
2、或者使用外接矩形绘制椭圆:

void cvEllipseBox(
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvBox2D 	box,//描述外接矩形的struct
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		thickness = 1,//线宽
	int 		line_type = 8,//线型,8连通或4连通
	int 		shift = 0//顶点坐标小数点位数
);
CvBox2D 结构体的定义:

typdef struct {
	CvPoint2D32f 	center;//外接矩形的中心,也就是椭圆的中心
	CvSize2D32f 	size;//外接矩形的宽度和长度,也就是椭圆的两轴长度
	float 		angle;//水平坐标轴和矩形first side 之间的夹角
} CvBox2D;

注意:cvEllipseBox是指定长轴和短轴的长度,而cvEllipse是指定长半轴和短半轴的长度。

CvBox2D的用法举例:
CvBox2D box;//CvBox2D没有带参数的构造函数,只能使用默认构造函数或copy构造函数
box.center=cvPoint2D32f(110,110);//外接矩形的中心,也就是椭圆的中心
box.size=cvSize2D32f(40,80);//外接矩形的宽度和长度,也就是椭圆的两轴长度
box.angle=40;//水平坐标轴和矩形first side 之间的夹角
cvEllipseBox(src1,box,CV_RGB(0,0,255),2,8);//使用外接矩形绘制椭圆
五、多边形polygon

1、同时绘制多个多边形并填充:

void cvFillPoly(
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvPoint** 	pts,//顶点坐标二维数组,每一列代表一个多边形
	int* 		npts,//多边形顶点数的数组,此数组大小就是pts的列数
	int 		contours,//绘制多边形的数量
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		line_type = 8//线型,8连通或4连通
	int 		shift = 0//顶点坐标小数点位数
);
2、只绘制一个多边形并填充成凸多面体:

void cvFillConvexPoly(
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvPoint* 	pts,//顶点坐标一维数组
	int 		npts,//多边形顶点数
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		line_type = 8,//线型,8连通或4连通
	int 		shift = 0//顶点坐标小数点位数
);

注意:此函数填充的凸多面体不是严格意义上的。

所谓凸多边形,就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边形的其他各边均在此直线的同旁,那么这个多边形就叫做凸多边形。

3、绘制多个多边形,但是不填充:

void cvPolyLine(
	CvArr* 		img,//绘图载体,一般是 IplImage*
	CvPoint** 	pts,//顶点坐标二维数组,每一列代表一个多边形
	int* 		npts,//多边形顶点数的数组,此数组大小就是pts的列数
	int 		contours,//绘制多边形的数量
	int 		is_closed,//是否闭合
	CvScalar 	color,//颜色,可用宏CV_RGB(int r,int g,int b)生成
	int 		thickness = 1,//线型,8连通或4连通
	int 		line_type = 8//顶点坐标小数点位数
	int 		shift = 0//顶点坐标小数点位数
);

六、例程:

#include "cv.h"
#include"highgui.h"
int main(int argc,char** argv)
{
	IplImage* src1=NULL;
	if(argc<2)
	{
		//new image
		src1=cvCreateImage(cvSize(512,512),8,3);
		cvSetZero(src1);
	}
	else
		//load image
		src1=cvLoadImage(argv[1],1);
	cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
	CvSize size=cvGetSize(src1);
	//draw line
	cvLine(src1,cvPoint(10,10),cvPoint(size.height/2,size.width/2),CV_RGB(255,255,255),1,8);
	//draw rectangle
	cvRectangle(src1,cvPoint(20,20),cvPoint(size.height/2,size.width/2),CV_RGB(125,125,125),2,8);
	//draw circle
	cvCircle(src1,cvPoint(100,100),80,CV_RGB(255,0,0),2,8);
	//draw ellipse
	cvEllipse(src1,cvPoint(150,150),cvSize(40,80),30,0,360,CV_RGB(0,255,0),2,8);
	//draw ellipse inside box
	CvBox2D box;
	box.center=cvPoint2D32f(110,110);
	box.size=cvSize2D32f(40,80);
	box.angle=40;
	cvEllipseBox(src1,box,CV_RGB(0,0,255),2,8);
	//draw polygon
	CvPoint p[]={cvPoint(100,100),cvPoint(150,150),
		cvPoint(200,120),cvPoint(250,150),
		cvPoint(300,100),cvPoint(250,50),
		cvPoint(200,80),cvPoint(150,50)};
	CvPoint** pt=new CvPoint*[1];
	pt[0]=p;
	int np[]={8};
	cvFillPoly(src1,pt,np,1,CV_RGB(124,23,44),8);
	cvFillConvexPoly(src1,p,np[0],CV_RGB(33,55,88),8);
	cvPolyLine(src1,pt,np,1,1,CV_RGB(90,208,31),1,8);
	//free
	cvShowImage("src",src1);
	cvWaitKey(0);
	cvReleaseImage(&src1);
	cvDestroyAllWindows();
}

F7生成解决方案,在cmd中转到.exe所在的文件夹:


运行结果:









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值