1.3 GUI - 绘图方法
2019-03-13 本文已影响0人
sumpig
在绘图方法中,有一些通用的参数如下:
- img : 你将要在其中绘制形状的图像
- color : 对于 BGR 格式,传入一个元祖,例如(255,0,0)表示蓝色。对于 灰度 图像,只需传入一个标量。
- thickness : 线条、圆等图形的厚度,默认是 1,如果传入对封闭图像比如圆 传入 -1,将会填充整个图形。
- lineType :线条的类型,8连接,反锯齿等。默认是 8-connected
线条
要画一条线,您需要给定线的起始和结束坐标。我们将创建一个黑色图像,并在其上从左上角到右下角绘制一条蓝线。
import numpy as np
import cv2
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
矩形
要绘制矩形,需要使用矩形的左上角和右下角。这次我们将在图像的右上角绘制一个绿色矩形。
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
圆
要画一个圆,你需要它的中心坐标和半径。我们将在上面绘制的矩形内绘制一个圆。
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)
椭圆
要绘制椭圆,我们需要传递几个参数。一个参数是中心位置(x,y)。下一个参数是轴长度(长轴长度、短轴长度)。角度是椭圆逆时针旋转的角度。startangle 和 endangle表示从长轴顺时针方向测量的椭圆弧的起点和终点。也就是说,给定值0和360表示整个椭圆。下面的示例在图像中心绘制一个半椭圆。
img = cv2.ellipse(img,(256,256),(100,50),0,0,270,(255,255,255),-1)
# 0,0,270 分别代表
# axes:椭圆尺寸(即长短轴)
# angle:旋转角度(顺时针方向)
# startAngle:绘制的起始角度(顺时针方向)
多边形
要绘制多边形,首先需要顶点的坐标。然后把这些顶点变成 (定点数, 1, 2) 维的矩阵,它的类型应为Int32。在这里,我们画一个有四个黄色顶点的小多边形。
# 定义四个顶点坐标
pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 255, 255))
cv2.polylines() 的参数3如果是False的话,多边形就不闭合。
如果需要绘制多条直线,使用cv2.polylines()要比cv2.line()高效很多,例如:
line1 = np.array([[100, 20], [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60], [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100], [300, 100]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))
添加文字
文字添加需要指定以下参数:
- 文本数据
- 定位要放置它的位置坐标(即数据开始的左下角)。
- 字体类型
- 字体大小
- 常规样式,如颜色、厚度、线型等。为获得更好的外观,建议使用linetype=cv2.line_aa。
我们将添加一个白色文字
cv2.putText(img,'OpenCV',(10,500), font, 1,(255,255,255),4,cv2.LINE_AA)