【OpenCv-Python】三、Drawing Functions in OpenCv OpenCv 中的绘图函数

版权声明:本文为博主原创文章,未经博主允许不得转载。| www.changxuan.top | www.qingning99.cn | 公众号:Worldhello | https://blog.csdn.net/vcx08/article/details/79010892

OpenCv 中的绘图函数

目标

  • 学会用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 提供了抗锯齿线条,看起来很适合画曲线。

3.1 画线

想要画一条线,你需要确定线的开始和结束的坐标。我们将要创建一个黑色背景的图片,在图片上画一条从左上方到右下方的蓝色线条。

import numpy as np
import cv2

#创建一个黑色图片 np.zeros()返回一个填充为0的数组
img = np.zeros((512,512,3),np.uint8)

#画一条5px粗的蓝色对角线
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)

3.2 画矩形

想要画一个矩形,你需要确定函数的左上角顶点和右下角顶点的坐标。这次我们会在图像右上角画一个绿色的矩形。

cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)

3.3 画圆

想要画一个圆,你需要确定它的圆心坐标和半径。我们在矩形中画一个圆。

cv2.circle(img,(447,63),63,(0,0,255),-1)

3.4 画椭圆

画一个椭圆,我们需要输入几个参数。一个参数是椭圆中心坐标(x,y)。下一个参数是长轴和短轴的长度。椭圆沿逆时针方向旋转的角度。椭圆弧沿顺时针方向起始的角度和结束角度。例如 值为 0 和 360就是整个椭圆。如果想要了解更多,请查看 cv2.ellipse()的文档。下面的例子在图像的中心绘制了半个椭圆

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

3.5 画多边形

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

pts = np.array([[20,5],[20,30],[70,20],[50,100]],np.int32) #首尾相连
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))

注意

如果第三个参数是False ,我们得到的多边形是不闭合的(首尾不相连)。

注意

cv2.polylines() 可以被用来画很多条线。只要把想要画的线放在一个列表中,将这个列表传给函数就行了。每条线都会被独立绘制,
这比用cv2.line()一条一条的绘制要快多了。

3.6 在图片上添加文字

在图片上绘制文字,你需要设置下列参数:

  • 你要绘制的文字
  • 你要绘制的位置
  • 字体的类型(通过查看 cv2.putText() 的文档找到支持的字体)
  • 字体的大小
  • 字体的一般属性如颜色,粗细,线条的类型等。为了更好看一点推荐使用linetype = cv2.LINE_AA

在图像上绘制白色的 OpenCv

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Opencv',(10,500),font,4,(255,255,255),2,cv2.LINE_AA)

警告

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

结果

所以现在是时候看看我们画的最终结果了。通过你前面学习到的知识把它显示出来吧。

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
阅读更多

扫码向博主提问

壹言

非学,无以致疑;非问,无以广识
去开通我的Chat快问
换一批

没有更多推荐了,返回首页