OPENCV基本绘图


基本绘图函数

用OpenCV的函数 line 绘 直线
用OpenCV的函数 ellipse 绘 椭圆
用OpenCV的函数 rectangle 绘 矩形
用OpenCV的函数 circle 绘 圆
用OpenCV的函数 fillPoly 绘 填充的多边形

直线

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)

椭圆

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

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, 因此次圆将被填充

填充多边形及非填充多边形

注:采用二维数组定义是其可画多个多边形
Point rook_points[1][20];
rook_points[0][0] = Point( w/4.0, 7w/8.0 );
rook_points[0][1] = Point( 3
w/4.0, 7w/8.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

非填充多边形类似
CVAPI(void) cvPolyLine( CvArr* img, CvPoint** pts, const int* npts, int contours,
int is_closed, CvScalar color, int thickness CV_DEFAULT(1),
int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );

矩形

rectangle( rook_image,
Point( 0, 7w/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, 此矩形将被填充

随机数及文字

初始化随机数发生器:
RNG rng( 0xFFFFFFFF );
为随机数在x_1, x_2间的均匀分布
org.x = rng.uniform(x_1, x_2);
org.y = rng.uniform(y_1, y_2);

putText( image, “Testing text rendering”, org, rng.uniform(0,8),
rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);
在 image 上绘制文字 “Testing text rendering” 。
文字的左下角将用点 org 指定。
字体参数是用一个在 之间的整数来定义。
字体的缩放比例是用表达式 rng.uniform(0, 100)x0.05 + 0.1 指定(表示它的范围是 )。
字体的颜色是随机的 (记为 randomColor(rng))。
字体的粗细范围是从 1 到 10, 表示为 rng.uniform(1,10) 。
static Scalar randomColor( RNG& rng )
{
int icolor = (unsigned) rng;
return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
}

RNG可以产生3种随机数 RNG(int seed) 使用种子seed产生一个64位随机整数,默认-1
RNG::uniform( ) 产生一个均匀分布的随机数 RNG::gaussian( ) 产生一个高斯分布的随机
RNG::uniform(a, b )
返回一个[a,b)范围的均匀分布的随机数,a,b的数据类型要一致,而且必须是int、float、double中的一种,默认是int。
RNG::gaussian( σ) 返回一个均值为0,标准差为σ的随机数
int N2 = rng.next(); 产生下一个随机数
注意:
double d = rng.uniform(0, 0.999999);
就是不能写成rng.uniform( 0 , 1),因为输入为int型参数,会调用uniform(int,int),只能产生0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值