前言
OpenCV-Python Gui模块主要是实现一些图形用户接口,例如创建窗口显示图像、画图、鼠标事件等。
代码
我们先来看一下在画图函数中出现的一些通用参数:
- img: 用来画不同几何形状的图像
- color: 图形的颜色。对于BGR图像,是一个数组,例如(255,0,0)表示蓝色。对于灰度图像是灰度值。
- thickness: 线条或⚪的粗细。-1表示图形闭合,例如对于⚪会画成实心的⚫。默认值是1。
- lineType: 线条类型,例如cv.LINE_8、cv.LINE_AA等。默认是cv.LINE_8。cv.LINE_AA表示抗锯齿线,画曲线较好。
画图举例:
import numpy as np
import cv2 as cv
# 创建一幅黑色图
img = np.zeros((512, 512, 3), np.uint8)
# 画一条对角蓝线,粗细为5
cv.line(img, pt1=(0,0), pt2=(511,511), color=(255,0,0), thickness=5)
# 在图像右上角画一个绿色矩形
cv.rectangle(img, pt1=(384,0), pt2=(510,128), color=(0,255,0), thickness=3)
# 在矩形内画一个实心圆
cv.circle(img, center=(447,63), radius=63, color=(0,0,255), thickness=-1)
# 在图像中心画半个椭圆
cv.ellipse(img, center=(256,256), axes=(100,50), angle=0, startAngle=0, endAngle=180, color=255, thickness=-1)
# 画一个有四个顶点的黄色多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1, 1, 2))
cv.polylines(img, [pts], True, (0,255,255))
# 添加文本
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10,500), font, 4, (255,255,255), 2, cv.LINE_AA)
cv.imshow('drawing', img)
cv.waitKey(0)
画线条
对于线条,需要传入线条的起始端点和结束端点。
cv.line(img, pt1=(0,0), pt2=(511,511), color=(255,0,0), thickness=5)
画矩形
对于矩形,需要传入矩形的左上角坐标和右下角坐标。
cv.rectangle(img, pt1=(384,0), pt2=(510,128), color=(0,255,0), thickness=3)
画圆
对于圆,需要圆心坐标和半径。
cv.circle(img, center=(447,63), radius=63, color=(0,0,255), thickness=-1)
画椭圆
对于椭圆,需要传入的参数有中心坐标,长轴和短轴,angle是逆时针方向的旋转角,而startAngle和endAngle表示椭圆从顺时针方向的起始位置和终止位置,例如startAngle=0和endAngle=360给出整个椭圆。
cv.ellipse(img, center=(256,256), axes=(100,50), angle=0, startAngle=0, endAngle=180, color=255, thickness=-1)
画多边形
对于多边形,需要顶点坐标。要求点的坐标形状为 ROWSx1x2,类型为int32。第三个参数表示是否闭合。
cv.polylines(img, [pts], True, (0,255,255))
添加文本
需要的参数:
- text: 文本字符串
- org: 文本的左下角起始坐标
- FontFace: 字体类型
- FontScale: 字体大小
- color、thickness、lineType等。
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV', (10,500), font, 4, (255,255,255), 2, cv.LINE_AA)
运行结果:
参考
https://docs.opencv.org/4.4.0/dc/da5/tutorial_py_drawing_functions.html.