OpenCv-Python学习笔记(二):绘图函数

demo

import cv2
import numpy as np

#创建一个全黑的图像
img = np.zeros((512,512,3),np.uint8)
#画一条线
cv2.line(img,(0,0),(511,511),(255,0,0),5)
#画一个矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
#画一个圆
cv2.circle(img,(447,63), 63, (0,0,255),1)
#画椭圆
cv2.ellipse(img,(256,256),(100,50),0,0,180,(0,255,0),-1)
#画多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。
#可以不用这一步也可以画多边形
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
#在图片上添文字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)
#显示图片
cv2.imshow("image",img)
cv2.waitKey()

在这里插入图片描述

画线

cv2.line(img,(0,0),(511,511),(255,0,0),5)

第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数(0,0)表示这条线的起始点坐标。
第三个参数(511,511)表示这条线的终点坐标。
第四个参数(255,0,0)表示这条线的颜色,例子中的(255,0,0)表示R为255,G为0,B为0即红色。
第五个参数5表示这条线的粗细即宽度。

画矩形

#画一个矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数(384,0)表示矩形左上角顶点的坐标。
第三个参数(510,128)表示矩形右下角顶点的坐标。
第四个参数(0,255,0)表示矩形线条的颜色。
第五个参数3表示矩形线条的粗细即宽度。

画圆

#画一个圆
cv2.circle(img,(447,63), 63, (0,0,255), -1)

第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数(447,63)表示圆心的坐标。
第三个参数63表示圆的半径。
第四个参数(0,0,255)表示圆的颜色。
第五个参数-1表示圆线条的宽度。
注意:第五个参数为负数的时候,不管值是多少,只要是负数,都表示画的是一个实色的圆,如果为正数,代表着圆的粗细即宽度。

画椭圆

#画椭圆
cv2.ellipse(img,(256,256),(100,50),0,0,180,(255,0,0),-1)

第一个参数ima是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数(256,256)表示圆心的坐标。
第三个参数(100,50)表示椭圆长轴和短轴的长度。
第四个参数0表示整个椭圆沿中心点旋转的角度。
第五个参数0表示圆弧沿顺时针方向的起始角度。
第六个参数180表示圆弧沿顺时针方向的结束角度。
注:本例中第五个参数为0,第六个参数为180,表示半个椭圆
第七个参数(255,0,0)表示椭圆的颜色。
第八个参数-1的含义与画圆函数的第五个参数相同。

画多边形

#画多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)

创建一个四行两列二维数组,指定多边形每个点的坐标,注意,数据类型必须是int32。二维数组的行数表示点的个数。

将pts写成这样会比较容易理解一点。
[ 
	[10,5],
	[20,30],
	[70,20],
	[50,20]
]
pts = pts.reshape((-1,1,2))
# 这里 reshape 的第一个参数为-1, 表明这一维的长度是根据后面的维度的计算出来的。

这里将二维数组转换为三维数据,如下所示,表示四个一行两列的二维数组。

[ 
	[ 
		[10,5]
	],
	[
	 	[20,30] 
	],
	[ 
	 	[70,20]
	],
	[
		 [50,20] 
	]
]

三维数组不好理解,实际上,不需要将二维数组转换为三维数组也可以画多变形,书上没有解释,官方文档也没有解释,我不太明白为什么需要加这一步。留一个疑问,以后理解了再来补充。

cv2.polylines(img,[pts],True,(0,255,255))

第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数[pts]表示多边形每个点的坐标的列表。
第三个参数True表示多边形是否闭合(首尾是否相连),True:闭合,False:不闭合。
第四个参数(0,255,255)表示多边形线条的颜色。
注意:cv2.polylines() 可以被用来画很多条线。只需要把想要画的线放在一个列表中,将这个列表传给函数就可以了。每条线都会被独立绘制。这会比用cv2.line() 一条一条的绘制要快一些。

在图片上添文字

#在图片上添文字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2)

第一个参数img是一张图片,表示我们将要在这张图片上画一条线,可以理解为一个画布。
第二个参数’OpenCV’表示文字的内容。
第三个参数(10,500)表示文字的起始位置。
第四个参数font表示文字的字体。
第五个参数4表示文字的大小即字号。
第六个参数(255,255,255表示文字的颜色。
第七个参数2表示文字线条的粗细。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值