首页 > 编程知识 正文

opencv绘制正方形,c语言绘制图像

时间:2023-05-04 12:25:09 阅读:57758 作者:3896

目的本节学习:

如何在Point中为图像定义二维点,以及为什么要使用Scalar在OpenCV的函数line中绘制http://www.Sina.com /在OpenCV的函数ellipse中绘制http://www.Sina.com/用opencv的函数rectangle画33555还是用opencv的函数circle画直线用opencv的函数fillPoly画椭圆OpenCV的原理

Point子数据结构表示其图像坐标和指定的2D点。 可以定义Point pt; pt.x=10; pt.y=8; 或者

pointpt=point (10,8 ); Scalar表示具有四个元素的数组。 子类型经常用于在OpenCV中传递像素值。

本节进一步表示RGB颜色值(三个参数)。 如果第四个参数不可用,则无需定义。

来看看例子吧。 如果给出以下颜色参数表达式:

由比例(a,b,c )定义的RGB颜色值是Red=c,Green=bandBlue=a

这些代码都来自OpenCV代码的sample文件夹。 或者点击这里获取。 代码分析打算绘制两个示例(原子和高兴的飞机),所以需要创建两个图像和相应的窗口来显示。

//窗口名称char atom _ window [ ]=' drawing 1: atom '; char rook _ window [ ]=' drawing 2: rook '; //制作天空全黑像素的天空图像的matatom _ image=mat :3360 zeros (w,w,CV_8UC3); mat rook _ image=mat :3360 zeros (w、w、CV_8UC3); 创建用于绘制不同几何形状的函数。 例如用MyEllipse和MyFilledCircle画原子。

//1 .绘制简单的原子。 ///1.a .创建椭圆my ellipse (atom _ image,90 ); 我的电子邮件(atom _ image,0 ); myellipse(atom_image,45 ); myellipse(atom_image,-45; ///1.b .创建圆myfilledcircle(atom_image,point ) w/2.0,w/2.0 ); 接下来在MyLine*,*rectangle和aMyPolygon上描绘令人高兴的飞机:

//2 .绘制令人高兴的飞机///2.a .凸多边形myPolygon(rook_image ); ///2.b .创建矩形返回(rook _ image,Point(w (0,7 * w/8.0 ),point (w,w ),scalar ) 0,255,- 1,8 ) myline(rook_image,point (w/4,7 * w/8 ),point (w/4,w ) ) myline(rook_image,point (w/2,7 * w/w )

p class="first" style="margin-top:0px!important">现在来看看每个函数内部如何定义:

MyLine

void MyLine( Mat img, Point start, Point end ){ int thickness = 2; int lineType = 8; line( img, start, end, Scalar( 0, 0, 0 ), thickness, lineType );}

正如我们所见, MyLine 调用函数 line 来实现以下操作:

画一条从点 start 到点 end 的直线段此线段将被画到图像 img 上线的颜色由 Scalar( 0, 0, 0) 来定义,在此其相应RGB值为 黑色线的粗细由 thickness 设定(此处设为 2)此线为8联通 (lineType = 8)

MyEllipse

void MyEllipse( Mat img, double angle ){ int thickness = 2; int lineType = 8; ellipse( img, Point( w/2.0, w/2.0 ), Size( w/4.0, w/16.0 ), angle, 0, 360, Scalar( 255, 0, 0 ), thickness, lineType );}

根据以上代码,我们可看到函数 ellipse 按照以下规则绘制椭圆:

椭圆将被画到图像 img 上椭圆中心为点 (w/2.0, w/2.0) 并且大小位于矩形 (w/4.0, w/16.0) 内椭圆旋转角度为 angle椭圆扩展的弧度从 0 度到 360 度图形颜色为 Scalar( 255, 255, 0) ,既蓝色绘椭圆的线粗为 thickness ,此处是2

MyFilledCircle

void MyFilledCircle( Mat img, Point center ){ int thickness = -1; int lineType = 8; circle( img, center, w/32.0, Scalar( 0, 0, 255 ), thickness, lineType );}

类似于椭圆函数,我们可以看到 circle 函数的参数意义如下:

圆将被画到图像 ( img )上圆心由点 center 定义圆的半径为: w/32.0圆的颜色为: Scalar(0, 0, 255) ,按BGR的格式为 红色线粗定义为 thickness = -1, 因此次圆将被填充

MyPolygon

void MyPolygon( Mat img ){ int lineType = 8; /** 创建一些点 */ Point rook_points[1][20]; rook_points[0][0] = Point( w/4.0, 7*w/8.0 ); rook_points[0][1] = Point( 3*w/4.0, 7*w/8.0 ); rook_points[0][2] = Point( 3*w/4.0, 13*w/16.0 ); rook_points[0][3] = Point( 11*w/16.0, 13*w/16.0 ); rook_points[0][4] = Point( 19*w/32.0, 3*w/8.0 ); rook_points[0][5] = Point( 3*w/4.0, 3*w/8.0 ); rook_points[0][6] = Point( 3*w/4.0, w/8.0 ); rook_points[0][7] = Point( 26*w/40.0, w/8.0 ); rook_points[0][8] = Point( 26*w/40.0, w/4.0 ); rook_points[0][9] = Point( 22*w/40.0, w/4.0 ); rook_points[0][10] = Point( 22*w/40.0, w/8.0 ); rook_points[0][11] = Point( 18*w/40.0, w/8.0 ); rook_points[0][12] = Point( 18*w/40.0, w/4.0 ); rook_points[0][13] = Point( 14*w/40.0, w/4.0 ); rook_points[0][14] = Point( 14*w/40.0, w/8.0 ); rook_points[0][15] = Point( w/4.0, w/8.0 ); rook_points[0][16] = Point( w/4.0, 3*w/8.0 ); rook_points[0][17] = Point( 13*w/32.0, 3*w/8.0 ); rook_points[0][18] = Point( 5*w/16.0, 13*w/16.0 ); rook_points[0][19] = Point( w/4.0, 13*w/16.0) ; const Point* ppt[1] = { rook_points[0] }; int npt[] = { 20 }; fillPoly( img, ppt, npt, 1, Scalar( 255, 255, 255 ), lineType ); } 我们用函数 :fill_poly:`fillPoly <>` 来绘制填充的多边形。请注意: 多边形将被画到图像 img 上多边形的顶点集为 ppt要绘制的多边形顶点数目为 npt要绘制的多边形数量仅为 1多边形的颜色定义为 Scalar( 255, 255, 255), 既BGR值为 白色

rectangle

rectangle( rook_image, Point( 0, 7*w/8.0 ), Point( w, w), Scalar( 0, 255, 255 ), -1, 8 );

最后是函数:rectangle:rectangle <> (我们并没有为这家伙创建特定函数)。请注意:

矩形将被画到图像 rook_image 上矩形两个对角顶点为 Point( 0, 7*w/8.0 ) 和 Point( w, w)矩形的颜色为 Scalar(0, 255, 255) ,既BGR格式下的 黄色由于线粗为 -1, 此矩形将被填充 结果

编译并运行例程,你将看到如下结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。