1. 简介
本文将介绍如何用 Python 的 OpenCV 库实现一个简易画图板。画图板会有基本绘画功能,例如:绘制线段、矩形、圆等,同时也可以选择颜色和画笔粗细属性进行绘画。最后,我们可以保存我们的绘画为图片。
2. 准备工作
2.1 安装 OpenCV
在使用 OpenCV 之前,我们需要安装这个库。下面是安装步骤:
pip install opencv-python
安装完成后,我们还需要安装 OpenCV 拓展包:
pip install opencv-python-headless
这个拓展包包含了 OpenCV 的一些非常有用的组件。
2.2 导入库
我们需要导入以下库进行编程:
cv2:用于图像处理
numpy:用于处理数值计算
import cv2
import numpy as np
3. 创建画布
在绘制图形之前,我们需要先创建一个画布,这个画布可以用矩阵来表示。
canvas = np.zeros((500, 500, 3), dtype="uint8")
我们用 numpy 库创建一个 500x500 的像素矩阵来表示画布。最后一个参数表示图像的数据类型,这里我们用了无符号 8 位整数作为数据类型。这个类型可以存储图像中的 RGB 颜色信息。
4. 绘制图形
4.1 绘制线段
我们可以使用 OpenCV 库中的 line 函数来画一条直线。
cv2.line(canvas, (0, 0), (100, 100), (0, 255, 0), 2)
这个函数的参数如下所示:
canvas:画布数据
(0, 0):线段的起点坐标
(100, 100):线段的终点坐标
(0, 255, 0):线段的颜色(BGR 格式,绿色)
2:线段的粗细(像素)
这里绘制了一条从左上角起始,到右下角为止的绿色线段,粗细为 2px。
4.2 绘制矩形
使用 rectangle 函数,我们可以画一个矩形。
cv2.rectangle(canvas, (10, 10), (100, 100), (0, 0, 255), 2)
这个函数的参数如下所示:
canvas:画布数据
(10, 10):矩形的左上角坐标
(100, 100):矩形的右下角坐标
(0, 0, 255):线段的颜色(BGR 格式,蓝色)
2:线段的粗细(像素)
这里我们绘制了一个蓝色边框的矩形。
4.3 绘制圆形
使用 circle 函数,我们可以画一个圆形。
cv2.circle(canvas, (250, 250), 50, (255, 0, 0), 2)
这个函数的参数如下所示:
canvas:画布数据
(250, 250):圆心坐标
50:圆的半径
(255, 0, 0):线段的颜色(BGR 格式,红色)
2:线段的粗细(像素)
这里我们绘制了一个红色圆形。
4.4 绘制文本
使用 putText 函数,我们可以在画布上写入一些文字。
cv2.putText(canvas, "Hello World", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
这个函数的参数如下所示:
canvas:画布数据
"Hello World":要写入画布的文字内容
(10, 30):文字基线的起点位置
cv2.FONT_HERSHEY_SIMPLEX:文字的字体类型
1:文字的大小
(0, 255, 0):文字的颜色
2:文字的粗细
这里我们在画布左上角写入了一个绿色的 "Hello World" 文字。
5. 画笔颜色和粗细
为了使画图更灵活,我们可以为画笔指定不同的颜色和粗细属性。在这里,我们声明两个变量 color 和 thickness 来表示画笔的颜色和粗细属性:
color = (0, 255, 0)
thickness = 2
现在,我们可以使用这两个变量来创建新的图形:
cv2.line(canvas, (200, 0), (200, 500), color, thickness)
cv2.rectangle(canvas, (300, 300), (400, 400), color, thickness)
cv2.circle(canvas, (250, 250), 25, color, thickness)
cv2.putText(canvas, "Python OpenCV Drawing", (10, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, color, thickness)
6. 整体代码
import cv2
import numpy as np
# 创建画布
canvas = np.zeros((500, 500, 3), dtype="uint8")
# 画笔颜色和粗细
color = (0, 255, 0)
thickness = 2
# 画直线
cv2.line(canvas, (0, 0), (100, 100), color, thickness)
# 画矩形
cv2.rectangle(canvas, (10, 10), (100, 100), color, thickness)
# 画圆形
cv2.circle(canvas, (250, 250), 50, color, thickness)
# 写入文字
cv2.putText(canvas, "Hello World", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, color, thickness)
# 可以重复画(画多次)
cv2.line(canvas, (200, 0), (200, 500), color, thickness)
cv2.rectangle(canvas, (300, 300), (400, 400), color, thickness)
cv2.circle(canvas, (250, 250), 25, color, thickness)
cv2.putText(canvas, "Python OpenCV Drawing", (10, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, color, thickness)
# 保存画布
cv2.imwrite("output.png", canvas)
# 显示画布
cv2.imshow("Canvas", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()
7. 结语
本文介绍了如何使用 OpenCV 库创建一个简易画图板。我们了解了如何使用 OpenCV 的绘图函数画直线、矩形、圆形和文本等等,同时也学习了如何给画笔指定颜色和粗细属性。这些基本的功能可以帮助我们更好地理解 OpenCV 的使用和图像处理的基础知识。