使用OpenCV中的绘图函数可以绘制直线、矩阵、圆、椭圆等多种几何图形,还能在图像的指定位置添加文字说明。

OpenCV提供的绘图函数,有一些公共参数,重要用于设置源图像、颜色、线条属性等。先提前进行说明:

  • img:在上面绘图的载体图像(主要用于设置源图像,也成画布、画板)

  • color:绘制形状的颜色,通常使用RGB表示颜色。对于灰度图像,只能传入灰度值。需要注意,颜色通道的顺序是BGR,而不是RGB。

  • thickness:线条的粗细。默认为1,如果设置为-1,表示填充图形(即绘制的实心的)

  • lineType:线条的类型,默认为8连接的类型,其他值如表所示。

LineType参数的值及说明

  • shift:表示精度,一般用不上。

绘制直线

cv2.line()的语法:

img = cv2.line( img, pt1, pt2, color[, thickness[, lineType]] )
  • pt1:表示起点
  • pt2:表示终点

例1:使用cv2.line()函数绘制三条线段。

import numpy as np
import cv2

n=300
img = np.zeros((n+1,n+1,3),np.uint8)
img = cv2.line(img,(0,0),(n,n),(255,0,0),3)
img = cv2.line(img,(0,100),(n,100),(0,255,0),3)
img = cv2.line(img,(100,0),(100,n),(0,0,255),3)

cv2.imshow('demo',img)
cv2.waitKey()

OpenCV绘制直线结果

绘制矩形

cv2.rectangle()的语法格式:

img = cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType]])
  • pt1:矩形顶点
  • pt2:矩形中与pt1对角的顶点

例1:在白色背景中绘制一个实心矩形。

import numpy as np
import cv2

n=300
img = np.zeros((n+1,n+1,3),np.uint8)

img = cv2.rectangle(img,(50,50),(n-100,n-50),(255,0,0),-1)

cv2.imshow('demo',img)
cv2.waitKey()

绘制矩形

绘制圆形

cv2.circle()的语法:

img = cv2.circle(img,center,radius,color[,thickness[,lineType]])
  • center为圆心
  • radius为半径

在白色背景中绘制一组同心圆。

import numpy as np
import cv2

d=400
img = np.ones((d,d,3),np.uint8)*255

(centerX,centerY) = (round(img.shape[1]/2),round(img.shape[0]/2))

red = (0,0,255)

for r in range(5,round(d/2),12):
    cv2.circle(img,(centerX,centerY),r,red,3)

cv2.imshow('demo',img)
cv2.waitKey()

绘制圆的结果

绘制椭圆

cv2.ellipse()语法:

img = cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[,thickness[,lineType]])
  • center:为椭圆的圆心坐标
  • axes:为轴的长度
  • angle:为偏转的角度
  • startAngle:圆弧的起始角度
  • endAngle:圆弧终结角的角度

在白色的背景图像内绘制一组空心椭圆。

import numpy as np
import cv2

d=400
img = np.ones((d,d,3),np.uint8)*255
#生成白色背景
center = (round(d/2),round(d/2))
#注意数值类型,不能直接d/2
size = (100,200) 
#轴的长度
for r in range(0,10):
    angle = np.random.randint(0,361)
    cv2.ellipse(img,center,size,angle,0,360,(0,255,0),np.random.randint(1,9))

cv2.imshow('demo',img)
cv2.waitKey()

绘制椭圆

绘制多边形

cv2.polylines()的语法:

img = cv2.polylines(img,pts,isClosed,color[,thickness[,lineType[,shift]]])
  • pts为多边形的各个顶点,数组的类型必须为numpy.int32
  • isClosed是闭合标记。若为True,则最后一个点会和第一个点连接,让其闭合。
import numpy as np
import cv2

d=400
img = np.ones((d,d,3),np.uint8)*255
#生成白色背景

pts = np.array([[200,50],[300,200],[200,350],[100,200]],np.int32)
#生成各个顶点,数据类型为int32
pts = pts.reshape((-1,1,2))
print(pts)

#cv2.polylines(img,[pts],True,(0,255,0),8)
cv2.polylines(img,[pts],False,(0,0,255),8)

cv2.imshow('demo1',img)

cv2.waitKey()

isClosed为True时候

isClosed为False时候

在图形上绘制文字

cv2.putText()函数语法:

img = cv2.putText(img,text,org,fontFace,fontScale,color[,thickness[,lineType[,bottomLeftOrigin]]])
  • text为要绘制的字体
  • org为绘制字体的位置,从文字的左小角为起点
  • fontFace表示字体
  • fontScale为字体大小
  • bottomLeftOrigin为控制文字方向,默认为False,表示水平方向。设置为True,则为垂直镜像的效果。

参数fontFace的值及含义

例:在白色背景图中,绘制一段镜像的文字。

import numpy as np
import cv2

d=800
img = np.ones((d,d,3),np.uint8)*255
#生成白色背景

font = cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
cv2.putText(img,'www.52txr.cn',(100,250),font,3,(0,0,255),5)
cv2.putText(img,'www.52txr.cn',(100,450),font,3,(0,255,255),5,cv2.FONT_HERSHEY_SIMPLEX,True)

cv2.imshow('demo1',img)

cv2.waitKey()

效果


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/OpenCV59.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 26 日
如果觉得我的文章对你有用,请随意赞赏