1-3 OpenCV的绘图函数-OpenCV-Python教程翻译

目标

  • 掌握使用OpenCV绘制不同的几何形状
  • 掌握如下函数:cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()等

代码

在上面提到的这些函数中,会出现如下一些共同的输入参数:

  • img:想要在它上面绘画形状的图片
  • color:形状的颜色。对于BGR格式,使用元组来传递,比如(255,0,0)是蓝色。对于灰度图,则传递一个灰度级数。
  • thinkness:线或者圆的线宽。如果将‘-1’传递给像圆这样的封闭图形,则会填充该形状。默认情况下thinkness=1
  • lineType:线条类型,比如是8-邻域还是抗锯齿线。默认情况下是8-邻域线,使用cv2.LINE_AA设定抗锯齿线,该线型可以很好的显示曲线

画线

import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.imshow('line',img)
cv2.waitKey()
cv2.destroyAllWindows()

 其中关键代码是cv2.line, img = cv2.line( img, pt1, pt2, color[, thickness[, lineType,[, shift]]])

其中,img:要在上面画线的图片;pt1:线段的第一个点;pt2:线段的第二个点;color:线段颜色;thinkness:线宽;lineType:线段类型;shift:点坐标的小数位数。

画方形

画一个方形,需要指定方形的左上角和右下角。下面的代码将在图片中画一个在右上角的绿色方形。

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

  img = cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType,[, shift]]]),其中pt1是左上角点,pt2是右上角点。

 画圆形

画一个圆形需要指定圆心和半径,下面的代码将在方形中间画一个圆形。

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

 img = cv2.circle(img, center, radius, color[, thinkness[, lineType[, shift]]] ),上面的代码中给thinkness传递的是-1,因此画出的是一个被填充的封闭圆形。

画椭圆

画一个椭圆则需要传递好几个参数。第一个参数是中心位置(x,y),第二个参数是轴长(主轴长度和短轴长度)。角度参数是椭圆绕逆时针方形的旋转角度。开始角度和终止角度指明椭圆从主轴点开始,顺时针方形的对应角度,比如,当给的0和360时,则画出完整的椭圆。下面的代码则在图片中画一个椭圆。

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

 img = cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thinkness[, lineType[, shift]]] )

画样条曲线

需要一系列节点坐标才能画出一条样条曲线。将节点坐标使用大小为ROWS×1×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))

 注意:对应于方法cv2.polylines()的第三个参数如果是False,则画出的是一个连接所有节点的样条曲线,不是封闭形状。cv2.polylines()可以用于画多条线,只需要创建一个所有线条的列表,将列表传递给函数,函数将单独画出每一个线条。

向图片中加入文字

加入文字需要指定如下的参数:

  • 想要加入的文字
  • 想要放入文字的位置(文字是以左下角作为开始点)
  • 字体类型(参考cv2.putText()文档)
  • 字体大小
  • 其他的参数比如颜色,线宽,线类型等。为了美观,建议使用先类型为cv2.LINE_AA

下面的代码将将OpenCV加入上面的图片。

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

 img = cv2.putText(img, text, org, fontFace, fontScale, color[, thinkness[, lineType[, bottomLeftOrigin]]] )

其中:text:需要加入的文字;org:在图片中文字字符串的左下角;fontFace:字体格式;fontScale:字体大小; bottomLeftOrigin:参数为True时,图片的原点时在左下角,默认情况下是在左上角。

所有代码如下:

import numpy as np
import cv2 as cv
# 创建一个黑色图片
img = np.zeros((512,512,3), np.uint8)
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],False,(0,255,255))
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
cv.imshow('line',img)
cv.waitKey()
cv.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/qq_22235957/article/details/81087568