opencv 绘制不同图形并添加文字

  • 目标

  1. 在图片上或者背景图上面绘制直线,矩形区域,圆形,椭圆或不规则图形并且添加文字。
  2. 上述对应的绘图函数的使用。
  • 示例代码

python  
# -*- coding:utf-8- *-
  
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), 5)
cv2.circle(img, (447, 63), 50, (0, 0, 255),-1)
cv2.ellipse(img, (256, 256), (100, 50), 90, 0,360, (0, 255, 0), -1)                              
  
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], False,(255, 255, 0),1)
  
font = cv2.FONT_HERSHEY_TRIPLEX
cv2.putText(img, 'opencv', (10, 500), font, 4, (255, 255, 0), 1, False)  
  
cv2.imshow('example', img)
cv2.waitKey(0)
cv2.destroyAllWindows()      
  
  • 画线段

cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
画线条,起点和终点分别是(0, 0),(511, 511),线条颜色为 (255, 0, 0),5像素粗细。

  • 画矩形

cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 5)
画矩形,起点和终点分别为(384, 0), (510, 128),矩形颜色为 (0, 255, 0),5像素粗细。

  • 画圆形

cv2.circle(img, (447, 63), 50, (0, 0, 255),-1)
画圆形,圆点坐标是(447, 63),半径为50像素,颜色为(0, 0, 255),-1表示圆内部将被用(0, 0, 255)色值填充。

  • 画椭圆

cv2.ellipse(img, (256, 256), (100, 50), 90, 0,360, (0, 255, 0), -1)
画椭圆,中心点坐标为(256, 256),长轴和短轴的长度分别为100和 50像素,椭圆选转的角度为90度,开始到结束的角度分别为0,360,说明是整个椭圆,如果是0,180度,说明是半个椭圆,椭圆形的颜色为(0, 255, 0)并且填充整个椭圆。

  • 画不规则图形

pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img, [pts], False,(255, 255, 0),1)
画不规则图形,首先定义不规则图形每个定点的坐标,6个顶点的坐标分别为[[10, 5], [20, 30], [70, 20], [50, 10], [50, 30], [70, 70];
reshape()函数创建一个改变尺寸的新数组,-1表示这一维的长度是根据后面的数组的维度计算出来的。reshape((-1,1,2))表示数组的维度是一行二列的新数组。其实这里可以不用reshape()函数,本来就是用的一行二列的数组表示每个点的坐标。
最后用画多条线的函数polylines()连接各个定点,得到不规则图形,[pts]表示各个点的数组,True表示不规则图形是首尾相连闭合的,如果设为False,则图形不会闭合,(255, 255, 0)表示线段的颜色,粗细为1像素。

  • 写文字

font = cv2.FONT_HERSHEY_TRIPLEX
cv2.putText(img, 'opencv' , (10, 500), font, 4, (255, 255, 0), 1,False)
添加文字,定义字体,然后写入文字,这里写入文字为'opencv',写入文字的开始位置为(10, 500),字体大小为4像素,字体颜色为 (255, 255, 0),字体粗细为6像素,最后的布尔值不知道有什么用,文档上是这样写的:
bottomLeftOrigin – When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.
由于OpenCV原生函数putText是不支持中文字体,所以这里无法写入中文。
关于文字字体名称标识符,参见 Hershey 字体集 ,可供字体类型如下:
FONT_HERSHEY_SIMPLEX 正常大小无衬线字体
FONT_HERSHEY_PLAIN 小号无衬线字体
FONT_HERSHEY_DUPLEX 正常大小无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂
FONT_HERSHEY_COMPLEX 正常大小有衬线字体
FONT_HERSHEY_TRIPLEX 正常大小有衬线字体,比FONT_HERSHEY_COMPLEX更复杂
FONT_HERSHEY_COMPLEX_SMALLFONT_HERSHEY_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX 手写风格字体
FONT_HERSHEY_SCRIPT_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX 更复杂
以上只是针对sanserif字体进行的设置。

  • 效果图

opencv 绘制不同图形并添加文字_第1张图片
效果图

你可能感兴趣的:(opencv 绘制不同图形并添加文字)