OpenCV I_06绘图基础

来源:互联网 发布:纬德软件下载 编辑:程序博客网 时间:2024/05/16 11:23


目标

• 学习使用 OpenCV 绘制不同几何图形
• 你将会学习到这些函数:cv2.line(),cv2.circle(),cv2.rectangle(),
cv2.ellipse(),cv2.putText() 等。

代码

上面所有的这些绘图函数需要设置下面这些参数:
• img:你想要绘制图形的那幅图像。
• color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0)
代表蓝色。对于灰度图只需要传入灰度值。
• thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形
就会被填充。默认值是 1.
• linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA
为抗锯齿,这样看起来会非常平滑。

创建一张图img来绘图

img = img=np.zeros((1000,1000,3),dtype=np.uint8)#也可以直接读取本地图片来绘图img = cv2.imread('PIC/000.jpg')



直线

要画一条线,你只需要告诉函数这条线的起点和终点。我们下面会画一条从左上方到右下角的蓝色线段。

cv2.line(img,(10,10),(500,500),(0,0,255),8) #8px  直接在img上画 



矩形

要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标。这次
我们会在图像的右上角话一个绿色的矩形。
cv2.rectangle(img,(500,500),(800,800),(0,255,0),5)


画圆

要画圆的话,只需要指定圆形的中心点坐标和半径大小。我们在上面的矩
形中画一个圆。

cv2.circle(img,(1200,300),100,(255,0,0),-1)  #-1 表示填充


椭圆

画椭圆比较复杂,我们要多输入几个参数。一个参数是中心点的位置坐标。
下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演
顺时针方向起始的角度和结束角度,如果是 0 很 360,就是整个椭圆。查看
cv2.ellipse() 可以得到更多信息。下面的例子是在图片的中心绘制半个椭圆。

# 图像,(中心点),(长轴长,短轴长),椭圆旋转,椭圆起始弧度点,结束弧度点,(BGR),pxcv2.ellipse(img,(256,256),(200,50),90,0,360,(0,0,255),-1)

多边形

画多边形,需要指点每个顶点的坐标。用这些点的坐标构建一个大小等于
行数 X1X2 的数组,行数就是点的数目。这个数组的数据类型必须为 int32。
这里画一个黄色的具有四个顶点的多边形。

pts = np.array([[100,50],[300,30],[70,200],[50,100]],np.int32)pts = pts.reshape((-1,1,2))cv2.polylines(img,[pts],False,(0,255,255),5) #改为Ture多边形首尾相连


在图片上添加文字

要在图片上绘制文字,你需要设置下列参数:
• 你要绘制的文字
• 你要绘制的位置
• 字体类型(通过查看 cv2.putText() 的文档找到支持的字体)
• 字体的大小
• 文字的一般属性如颜色,粗细,线条的类型等。为了更好看一点推荐使用
linetype=cv2.LINE_AA。
在图像上绘制白色的 OpenCV。

# 添加文字 为了更好看一点推荐使用 linetype=cv2.LINE_AAfont=cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,'OpenCV',(1000,500), font, 4,(255,255,255),3)


警 告:所 有 的 绘 图 函 数 的 返 回 值 都 是 None, 所 以 不 能 使 用 img =cv2.line(img,(0,0),(511,511),(255,0,0),5)。

总结:

'''函数:cv2.line(),cv2.circle(),cv2.rectangle(), cv2.ellipse(),cv2.putText()'''import cv2import timeimport numpy as np img = cv2.imread('PIC/000.jpg')# 直线cv2.line(img,(10,10),(500,500),(0,0,255),8) #8px  直接在img上画 # 矩形cv2.rectangle(img,(500,500),(800,800),(0,255,0),5)# 圆cv2.circle(img,(1200,300),100,(255,0,0),-1)  #-1 表示填充# 椭圆# 图像,(中心点),(长轴长,短轴长),椭圆旋转,椭圆起始弧度点,结束弧度点,(BGR),pxcv2.ellipse(img,(256,256),(200,50),90,0,360,(0,0,255),-1)# 多边形pts = np.array([[100,50],[300,30],[70,200],[50,100]],np.int32)pts = pts.reshape((-1,1,2))cv2.polylines(img,[pts],False,(0,255,255),5) #改为Ture多边形首尾相连# 添加文字 为了更好看一点推荐使用 linetype=cv2.LINE_AAfont=cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,'OpenCV',(1000,500), font, 4,(255,255,255),3)cv2.imshow('picture',img)key = cv2.waitKey(0)if key == ord('a'):cv2.destroyAllWindows()


输出结果:








0 0