opencv的中文手册学习(三)
练习题:尝试使用OpenCV中可用的绘图功能创建OpenCV的徽标。
实现的思路步骤:
- 首先你需要找到一张opencv的标志
- 然后设定区域大小绘图区域(600, 739),通过
mspaint
找到每个圆圈的区域(外直径280的圆,内直接110圆,开口,分别为下,右上,上 60度角) - 难点处理,就是这三个圆的都有一个不同的缺口 ,并且是空心的(猜测可以使用两个圆的叠加)处理是使用cv.ellipsec函数处理,画外面的弧线,里面有白色圆心遮盖。
- 最后就是文字处理设置。
技术准备:
主要用到的函数:cv.circle , cv.putText , cv.ellipsec的函数学习
字体参见:文字支持
代码实现:
import numpy as np
import cv2 as cv
# 基础数据 整体大小(600 * 740)
# 圆形直径 分别为 280 110 居中
# 创建白色的图像
img = np.ones((740, 600, 3), np.uint8)*255
# 绘制第一个圆形 圆心计算 600 div 2 =300 280 div 2 =140 )
# 图片 (圆心) (短轴长,长轴长),旋转角度,旋转角度,开口大小角度,(颜色),(线条粗细,-1为实心)
cv.ellipse(img, (300, 140), (140, 140), 120, 0, 300, (0, 0, 255), -1)
cv.circle(img, (300, 140), 55, (255, 255, 255), -1)
# 下面两个圆形 两个圆的间距(600 - 280 - 280 = 40 )
# (140, 280 + 140) (140 + 280 + 40,280 + 140)
cv.ellipse(img, (140, 420), (140, 140), 0, 0, 300, (0, 255, 0), -1)
cv.circle(img, (140, 420), 55, (255, 255, 255), -1)
cv.ellipse(img, (460, 420), (140, 140), 300, 0, 300, (255, 0, 0), -1)
cv.circle(img, (460, 420), 55, (255, 255, 255), -1)
# 向图像添加文本
font = cv.FONT_HERSHEY_COMPLEX
# 图像,文字,位置,字体 字体大小 ,颜色 线条 ()
cv.putText(img, 'OpenCV', (0, 680), font, 5, (0, 0, 0), 10, cv.LINE_AA)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()
实现趣事
在实现过程,我发现opencv的图标中还藏着一个正三角形,所有我将开口的角度取成300 = 360 - 60。位置的起始位置也是通过这个为依据计算的。感觉图片位置的还原度还是十分的高。只是字体我一直没有找到一个特别合适的。不能再过多的消耗时间了。只是在上面附加了,python支持的字体。