OpenCV_Python官方文档3——绘图操作

版权声明:本文为博主原创文章,欢迎转载,但未经作者同意必须保留此段声明,版权所有翻版必究。 https://blog.csdn.net/sinat_38814578/article/details/83018741

OpenCV-Python Tutorials

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

绘图操作

Drawing Functions in OpenCV

主要函数

  1. cv2.line()
  2. cv2.circle()
  3. cv2.rectangle()
  4. cv2.ellipse()
  5. cv2.putText()

上述函数的共同参数:

  • img:画板, 在哪副图像上绘制图形
  • color:所画图形的颜色,BRG模式,需要传入一个元组,例(255,0,0)表示蓝色,对于灰度图只需传入灰度值即可
  • thickness:线条的粗细,如果该值为-1,那么代表是闭合图形,即该图形被填充。默认值为1
  • linetype:线条的类型,生成线条的方式,8-connected、抗锯齿等;默认值是 8-connected。cv2.LINE_AA可以让曲线获得抗锯齿的效果,从而使曲线更加平滑。

1. Drawing Line(画线)

要画一条直线,需要传递直线起始点的坐标。

在一张黑色的图片上画一条从左上角到右下角的蓝色对角线。

import numpy as np
import cv2

#创建一个黑色背景
img = np.zeros((512,512,3),np.uint8)

#画一条宽度为5个像素,颜色为蓝色的对角线
cv2.line(img,(0,0),(511,511),(255,0,0),5)

#创建窗口,显示图形
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
#cv2.resizeWindow('image',500,500)#定义画布的大小
cv2.imshow('image',img)
#任意敲击键盘,关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

说明numpy.zeros()函数——创建一维或多维数组,第一个参数表示一个元组(高,宽,通道数),第二个参数设置数组元素类型。

2. Drawing Rectangle(画长方形)

要画一个长方形,需要传递它的左上角与右下角顶点的坐。

在背景的右上角画一个绿色的长方形。

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

3. Drawing Circle(画圆)

要画一个圆,需要指定圆心的位置和圆的半径。

在之前画的长方形内部画一个圆。

cv2.circle(img,(447,63),63,(0,0,255),-1) #-1表示向内填充

4. Drawing Ellipse(画椭圆)

要画一个椭圆,第一个参数是中心点的位置坐标,第二个参数是椭圆长轴和短轴的长度。angle代表椭圆沿逆时针方向偏转的角度。startAngleendAngle表示从长轴开始顺时针方向从 startAngle 到 endAngle 的部分会被充满颜色。关于角度问题请点击这里

在画布的中心位置画一个半椭圆。

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

5. Drawing Polygon(画多边形)

要画一个多边形,需要指定每个顶点坐标。然后把所有的顶点放到构建一个大小相等于ROWS X 1 X 2的数组里面。这里 ROWS 就是顶点的个数,数组必须是 int32 类型。

pts=np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))

说明

  • numpy.array()函数用来创建一个数组,这里给它传了一个二维数组,第二个参数为数组类型。
  • reshape()函数表示给数组一个新的形状而不改变其数据。
    这里将它转换为一个ROWS x 1 x 2格式的三维数组。reshape((-1,1,2))里面的-1代表这个维度是有其他两个维度计算而来的,数组的转换规律是不能改变原数组中的元素。
  • cv2.polylines()函数用来画多条直线。第三个参数如果是 False, 表示图形首尾不相连,就得不到一个闭合的图形。
    可以被用来画一组直线,把想画的直i线放在一列传给函数。比用cv2.line()一条一条的画直线效率高很多。

6. Adding Text to Images(在图片上添加文字)
要在图像上显示文字,需要设定以下参数。

  • 想要添加的文字内容
  • 放置文字的坐标位置
  • 字体
  • 字号
  • 颜色
  • 粗细
  • 线型,推荐使用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)

全部代码如下

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) #直线
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,45,300,185,-1) #椭圆
#多边形
pts=np.array([[10,5],[200,300],[100,70],[60,45]],np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255),2)

#在画布上添加文字
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'HONGYUAN~',(80,500),font,2,(255,255,255),2,cv2.LINE_AA)

#创建窗口,显示图形
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
#cv2.resizeWindow('image',950,500)#改变画布的大小
cv2.imshow('image',img)
cv2.imwrite('yuan~.jpg',img)
print('done')
cv2.waitKey(0)
cv2.destroyAllWindows()

显示效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_38814578/article/details/83018741