python编程IT大杂烩

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

2016-09-24  本文已影响4998人  刑素素
  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字体进行的设置。

效果图
上一篇 下一篇

猜你喜欢

热点阅读