在学习绘图函数之前,先了解需要用到的几个参数

1.img:放置参数,存放绘制的图像。

2.color:形状的颜色。以 RGB 为例,需要传入一个元组,例如:(255,0,0) 代表蓝色【注:编写代码时,颜色顺序是BGR,顺序相反】。对于灰度图只需要传入灰度值。

3.thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是1

4. linetype:线条的类型,8连接,抗锯齿等。默认情况是8连接。cv2.LINE_AA为抗锯齿,这样看起来会非常平滑。

注:.八连通就是以当前像素为中心,周围八个像素点都可以连接其他像素,四联通是通过上下左右四个像素点连接其他像素点。具体可以参考:

OpenCV里的画图功能(drawing Function)里面有linetype这个参数,有什么用,为什么都是8?_百度知道

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

一:线段的绘制

1.函数:cv2.line(img,pts,color,thickness,linetype)

2.参数说明:pts:直线的起点与终点

3.举例:画一条从左上方到右下角的蓝色线段

#画一条从左上方到右下角的蓝色线段
import numpy as np
import cv2
#创建一张黑色背景图
img=np.zeros((512,512,3),np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5) #参数:(0,0)起点、(511,511)终点、(255,0,0)线段颜色、5线宽
cv2.imshow("line",img)
k=cv2.waitKey(0)

输出:

opencv画多个矩形框 python_opencv画多个矩形框 python

二:矩形的绘制

要画一个矩形,你需要告诉函数的左上角顶点和右下角顶点的坐标

1.函数:cv2.rectangle(img,pts,color,thickness,linetype)

2.参数说明:pts:矩形左上角顶点和右下角顶点的坐标

3.举例:在图像的右上角画一个绿色的矩形

#在图像的右上角画一个绿色的矩形
import cv2
import numpy as np
img=np.zeros((512,512,3),np.uint8)
cv2.rectangle(img,(384,3),(509,128),(0,255,0),3)
cv2.imshow("rectangle",img)
cv2.waitKey(0)

输出:

opencv画多个矩形框 python_opencv_02

三:圆的绘制

要画圆的话,只需要指定圆形的中心点坐标和半径大小

1.函数:cv2.circle(img,pts,radius,color,thickness,linetype)

2.参数说明:

  • pts:圆心
  • radius:半径 

3.举例: 在上面的矩 形中画一个红色实心内接圆

#在上面的矩形中画一个红色实心内接圆
import cv2
import numpy as np
img=np.zeros((512,512,3),np.uint8)
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv2.circle(img,(447,63),63,(0,0,225),-1)
cv2.imshow('circle',img)
cv2.waitKey(0)

输出:

opencv画多个矩形框 python_计算机视觉_03

四:椭圆的绘制

        画椭圆比较复杂,我们要多输入几个参数。一个参数是中心点的位置坐标。 下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧演顺时针方向起始的角度和结束角度,如果是 0 很 360,就是整个椭圆。

1.函数:cv2.ellipse(参数)

2.参数说明:

  • 参数1:img
  • 参数2:椭圆圆心(x,y)
  • 参数3:长轴和短轴的长度
  • 参数4:angle:椭圆沿逆时针方向旋转的角度
  • 参数5:startAngle:椭圆弧演顺时针方向起始的角度
  • 参数6:endAngle:椭圆弧演顺时针方向结束的角度

例: cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

3.举例:在图片的中心绘制半个蓝色实心椭圆

#在图片的中心绘制半个蓝色实心椭圆
import cv2
import numpy as np
img=np.zeros((512,512,3),np.uint8)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)#先画弧再旋转,都是顺时针进行
cv2.imshow('ellipse',img)
cv2.waitKey(0)

输出:

opencv画多个矩形框 python_python_04

 五:多边形绘制

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

1.函数:cv2.polylines(img,[pts],isClosed,color,thickness,lineType)

2.参数说明:

  • 参数1:img
  • 参数2:[pts]:表示点对
  • 参数3:isClosed,布尔型,True表示的是线段闭合,False表示的是仅保留线段
  • 参数4:color:线段颜色,格式是(R,G,B)值
  • 参数5:thickness
  • 参数6:lineType

3.举例:画一个黄色的具有四个顶点的多边形

#画一个黄色的具有四个顶点的多边形
import cv2
import numpy as np
img=np.zeros((512,512,3),np.uint8)
pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
cv2.polylines(img,[pts],1,(0,522,522),1)
cv2.imshow('img',img)
cv2.waitKey(0)

输出:

opencv画多个矩形框 python_opencv_05

 六:添加文字

1.函数:cv2.putText(参数)

cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)

2.参数说明:

  • 参数1:img
  • 参数2:要添加的文本
  • 参数3:文字的起始坐标
  • 参数4:font:字体(通过查看 cv2.putText() 的文档找到支持的字体)
  • 参数5:文字大小(缩放比例)
  • 参数6:颜色
  • 参数7:线条宽度
  • 参数8:线条形状(为了更好看一点推荐使用 linetype=cv2.LINE_AA)

3.举例:在图像上绘制白色的 OpenCV

#在图像上绘制白色的 OpenCV
import cv2
import numpy as np
img=np.zeros((512,512,3),np.uint8)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)
cv2.imshow('Text',img)
cv2.waitKey(0)

输出:

opencv画多个矩形框 python_图像处理_06

 七:练习

将上面的函数组合起来输出结果吧!

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,225),-1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,225,-1)
pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
cv2.polylines(img,[pts],1,(0,522,522),1)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)
cv2.imshow("缝合",img)
cv2.waitKey(0)

输出

opencv画多个矩形框 python_图像处理_07