OpenCV作为一种强大的图形图像处理工具,也提供了许多绘制不同集合图形的功能。下面我们一一道来。为了更好地解释下面提到的方法的功能,我们约定一下几个参数的表述:
- img : 我们要绘制形状的图片
- color : 我们要绘制的形状的RGB颜色,例如: (255,0,0)表示红色色。
- thickness : 线条宽度。默认为1.
- lineType : 线条类型。
1. 绘制线条
调用绘制线条方法之前,需要传入起点和终点的坐标。下面我们展示一个从黑色图片的左上角到右下角画蓝色线条的例子。示例代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 10 15:46:43 2018
@author: Quan
"""
import numpy as np
import cv2
from matplotlib import pyplot as plt
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(0,0,255),5)
plt.imshow(img)
运行结果如下:
2. 绘制矩形
OpenCV中利用方法cv2.rectangle()
绘制一个矩形,该方法需要确定矩形的左上角和右下角,下面是个简单的示例:
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
运行结果如下:
3. 绘制圆形
OpenCV中利用方法cv2.circle()
绘制一个圆形,该方法需要确定圆形的圆心的位置以及半径的长度,下面是个简单的示例:
cv2.circle(img,(447,63), 63, (0,0,255), -1)
运行结果如下:
4. 绘制椭圆
OpenCV中利用方法cv2. ellipse()
绘制一个椭圆,该方法需要确定如下参数:中心位置、长轴长度、短轴长度、旋转角度、开始合结束角度(0~360度)、颜色、是否填充等,下面是个简单的示例,展示了三种不同形式的椭圆:
cv2.ellipse(img,(256,256),(100,50),90,0,360,255,-1)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)
运行结果如下:
5. 绘制多边形
OpenCV中利用方法cv2. polylines()
绘制一个多边形,在绘制多边形前,我们需要明确多边形每个定点的坐标,并将每个顶点按照链接顺序进行排序,否则顶点的顺序不同,得到的多边形的形状也不一样,下面展示了同样的顶点不同的绘制结果。
示例1:
pts = np.array([[470,250],[200,30],[70,200],[100,400]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
plt.imshow(img)
示例1运行结果如下:
示例2:
pts = np.array([[470,250],[70,200],[200,30],[100,400]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
plt.imshow(img)
示例2运行结果如下:
6. 绘制文字
OpenCV中利用方法cv2. putText()
来绘制文字,在绘制文字之前,需要明确以下几项:
- 文字内容。
- 起始位置,即文字左下角的坐标。
- 字体类型,cv2定义了大量可以使用的字体类型,具体可以参考相关文档。
- 字体大小。
- 颜色,线型等。
下面是个简单的实例:
cv2.putText(img,'Quan',(10,500), cv2.FONT_HERSHEY_COMPLEX_SMALL, 4,(255,255,255),2,cv2.LINE_AA)
plt.imshow(img)
运行结果如下: