让我们使用 OpenCV 绘制 OpenCV 徽标
OpenCV 是一个很棒的、强大的图像处理、计算机视觉和深度学习库。说它是所有计算机视觉库之神并不是开玩笑。
在本文中,我们将了解 OpenCV 的图像绘制功能,以及如何使用它绘制自己的徽标。
先决条件 - 所有你需要
为了能够成功使用本教程,我们只需要安装 Python 和 OpenCV。
在这里,我们将使用pip
安装OpenCV,它直接安装wheel文件,无需我们担心手动构建过程。我们当然可以进行手动构建,但这本身需要单独编写(检查这个已经可用的很棒的指南)。
我们将在这个活动的虚拟环境中工作(考虑到我们已经安装了 python,如果没有,请检查这个)。要创建此环境,请在终端中执行以下步骤:
~ % mkdir opencv_logo_proj
~ % cd opencv_logo_proj
opencv_logo_proj ~ % python3 -m venv venv
如果我们注意到在目录中创建了一个名为venv
的文件夹,这将在我们的工作目录opencv_logo_proj
中创建一个虚拟环境。
要激活这个venv
,我们可以执行以下操作:
opencv_logo_proj ~ % source venv/bin/activate
(venv) opencv_logo_proj ~ %
终端中的(venv)
前缀表示该环境对我们进行工作是活动的。现在它之外的任何东西都不会受到影响,并且库只会安装在这个环境中。
所以继续前进,首先我们在 python 虚拟环境中升级 pip、setuptools 和 wheel 包(以避免任何不必要的错误)。
(venv) ~ % pip install --upgrade pip setuptools wheel
当您运行上述命令时,它会一次性升级 pip、setuptools 和 wheel。现在让我们安装 OpenCV。
(venv) ~ % pip install opencv-contrib-python
我们将安装 OpenCV 及其所有主要模块和贡献模块(这包含正在进行的工作,但主要是稳定版本)。
按下回车键后,您应该会看到如下内容:
Collecting opencv-contrib-python
Downloading opencv_contrib_python-4.5.1.48-cp38-cp38-macosx_10_13_x86_64.whl (51.3 MB)
|████████████████████████████████| 51.3 MB 7.5 MB/s
Collecting numpy>=1.17.3
Downloading numpy-1.20.2-cp38-cp38-macosx_10_9_x86_64.whl (16.0 MB)
|████████████████████████████████| 16.0 MB 3.9 MB/s
Installing collected packages: numpy, opencv-contrib-python
OpenCV 依赖于 NumPy,因此它也会安装它。如果您在 OpenCV 安装过程中遇到任何问题,请在评论中与我联系。
让我们继续有趣的部分。
OpenCV Logo 使用 OpenCV
我们的目标是绘制这个:
让我们创建一个文件,将其命名为openCvSymbolDrawing.py
(或任何您喜欢的名称)。在其中添加以下代码行:
# ./opencv_logo_proj/openCvSynmbolDrawing.py
import cv2
import numpy as np
#output image
img = np.full((360, 512, 3), 255, dtype="uint8")
-
首先,我们导入所需的库,
import cv2
导入 OpenCV 计算机视觉库,import numpy as np
导入别名为np
的 numpy。 -
然后我们创建输出图像,我们将在其中绘制 OpenCV 徽标。 OpenCV 在后台使用 NumPy 并将图像视为 NumPy 数组。
这里要注意的重要一点是,尺寸(360, 512, 3)
是从图像的左上角开始测量的。所以,它从那个角落向下(y轴)取360
点,从那个角落向右(x轴)取512
点,3
表示它是一个3维数组(也表示它的3通道图像,即- 蓝色、绿色、红色),顺便说一下,所有BGR
图像都在 OpenCV 中(GRAY
图像是二维的)。
现在,cv2
中有几个绘图实用程序可以帮助我们达到预期的效果。在这里,我们来看看ellipse
表格绘制logo。在文件中添加以下代码:
# ./opencv_logo_proj/openCvSynmbolDrawing.py
img = cv2.ellipse(img, (256, 80), (60,60), 120,0,300,(0,0,255),-1)
img = cv2.ellipse(img, (256, 80), (20,20), 120,0,300,(255,255,255),-1)
img = cv2.ellipse(img, (176, 200), (60,60), 0,0,300,(0,255,0),-1)
img = cv2.ellipse(img, (176, 200), (20,20), 0,0,300,(255,255,255),-1)
img = cv2.ellipse(img, (336, 200), (60,60), 300,0,300,(255,0,0),-1)
img = cv2.ellipse(img, (336, 200), (20,20), 300,0,300,(255,255,255),-1)
font = cv2.FONT_HERSHEY_SIMPLEX
img = cv2.putText(img, "OpenCV", (196,296), font, 1, (0,0,0), 4, cv2.LINE_AA)
- 我们使用
cv2.ellipse
在图像img
上绘制一个椭圆。它获取需要绘制的图像名称img
,表示椭圆中心的中心坐标(256, 80)
,表示椭圆长轴和短轴的轴长度(60, 60)
,椭圆需要旋转的旋转角度120
度,起始角度0
度,结束角度300
度,颜色椭圆使用(0, 0, 255)
作为红色椭圆,最后一个参数是厚度,当设置为-1
时,用给定的颜色填充图形。这将形成一个椭圆,如下所示:
img = cv2.ellipse(img, (256, 80), (20,20), 120,0,300,(255,255,255),-1)
此语句创建一个同心椭圆来填充白色以获得所需的形状。
- 同样,接下来的几个语句创建了具有所需形状的绿色和蓝色椭圆。
img = cv2.ellipse(img, (176, 200), (60,60), 0,0,300,(0,255,0),-1)
img = cv2.ellipse(img, (176, 200), (20,20), 0,0,300,(255,255,255),-1)
我们得到一个绿色椭圆标志。
img = cv2.ellipse(img, (336, 200), (60,60), 300,0,300,(255,0,0),-1)
img = cv2.ellipse(img, (336, 200), (20,20), 300,0,300,(255,255,255),-1)
最后,我们绘制了一个蓝色椭圆标志。
-
接下来,我们可以根据需要添加更多信息,例如文本。在这里,我们设置了一个字体
font = cv2.FONT_HERSHEY_SIMPLEX
采用 hershey simplex 字体,我们可以使用它来设置文本的样式。 -
img = cv2.putText(img, "OpenCV", (196,296), font, 1, (0,0,0), 4, cv2.LINE_AA)
将文本放置在图像上并获取以下参数,图像需要在img
上放置文本的位置,文本OpenCV
,文本左下角坐标的位置(196,296)
,我们之前定义的字体样式font
,字体比例1
,颜色文本(0,0,0)
,4
的粗细,最后是cv2.LINE_AA
的类型(可选,我们也可以跳过)。
现在,我们显示最终结果并保存输出,将以下代码添加到文件中:
# ./opencv_logo_proj/openCvSynmbolDrawing.py
cv2.imshow("OpenCV Logo", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('opencvlogo.png', img)
-
我们使用
cv2.imshow
方法输出图像以供显示,但简单地说imshow
意味着它将显示该图像几毫秒并完成程序并退出终端。我们不希望这样,我们需要能够看到图像只要我们想要,对吧? -
这里使用了
cv2.waitKey
,它接受一个参数,比如0
,让系统知道等待某个按键直到它退出进程。通过将0
作为值,这意味着任何按键都会继续程序并退出进程。要清除显示输出,我们需要在使用cv2.waitKey(0)
后显式使用cv2.destroyAllWindows()
让系统知道要清除输出。 -
最后,我们使用
cv2.imwrite('opencvlogo.png', img)
保存结果,它获取图像文件名和要保存的图像。
最终输出如下所示:
结论,已经?
是的,就是这样。我们能够绘制一个几乎(我会说 99%)与实际徽标相似的符号。我希望您喜欢使用像 OpenCV 这样功能强大且易于使用的库的过程。
这是我在大学时代所做的一项有趣的活动。希望这会激发您追求并进一步研究计算机视觉和图像处理的能力。
如果您需要更多有趣的计算机视觉活动,别忘了查看OpenCV-Python-Computer-Vision。
-
刚刚开始您的开源之旅?别忘了查看你好开源
-
需要灵感或对 Python 项目有不同的看法,或者只是在那里探索?检查Awesome Python Repos
-
想从零开始制作一款简单又超棒的游戏吗?查看乒乓球
-
想要
++
你的 GitHub Profile README?查看报价 - 自述文件
直到下一次!
纳马斯特🙏
更多推荐
所有评论(0)