前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python实战(2) —— 使用OpenCV的绘图功能创建OpenCV的徽标

OpenCV-Python实战(2) —— 使用OpenCV的绘图功能创建OpenCV的徽标

作者头像
Rattenking
发布2022-11-07 14:47:39
5880
发布2022-11-07 14:47:39
举报
文章被收录于专栏:Rattenking

1. 需求分析

  1. 使用OpenCV中可用的绘图功能创建OpenCV的徽标;
  2. 目标图像及目标图像的宽高;
  3. 测量绘制的目标的外径和内径;
  4. 测量绘制的目标的颜色;
  5. 计算绘制的目标的圆心;
  6. 绘制目标的文字;
  7. 将原图和绘制图像放到一起对比。

2. 目标图像

输入图片说明
输入图片说明

3. 代码实现

  1. 目标图像及目标图像的宽高;
  2. 复制一个opencv-logo矩阵;
  3. 使用Photoshop测量外径和内径;
  4. 使用Photoshop测量各个圆的颜色;
  5. 计算各个绘制圆的圆心;
  6. 分别绘制三个圆,使用同心圆去掉中间部分,使用椭圆实现圆弧缺口;
  7. 绘制 OpenCV 的文字;
  8. 将原图和自绘图放入一张图片进行对比。
代码语言:javascript
复制
import cv2 as cv
import numpy as np

def draw_opencv_logo():
  logo = cv.imread("./images/opencv-logo-white.png")
  h,w,c = logo.shape
  # 复制一个opencv-logo矩阵,赋值白色
  img = np.zeros_like(logo)
  # img.fill(255)
  # 使用Photoshop测量外径和内径
  max_d = 86
  max_r = int(max_d / 2)
  min_d = 34
  min_r = int(min_d / 2)
  # 使用Photoshop测量各个圆的颜色
  color_red = (68,42,255)
  color_green = (103,218,139)
  color_blue = (255,141,18)
  color_bg = (255,255,255)
  color_black = (0,0,0)

  # 圆心计算
  center_red = (int(w / 2), max_r)
  center_green = (max_r, max_d + max_r - 8)
  center_blue = (w - max_r, max_d + max_r - 8)

  # 顶部红色圆
  cv.circle(img, center_red, max_r, color_red, -1,cv.LINE_AA)
  cv.circle(img, center_red, min_r, color_black, -1,cv.LINE_AA)
  cv.ellipse(img, center_red, (max_r, max_r + 2), 0, 60, 120, color_black, -1,cv.LINE_AA)

  # 左侧绿色圆【椭圆整体旋转240度】
  cv.circle(img, center_green, max_r, color_green, -1,cv.LINE_AA)
  cv.circle(img, center_green, min_r, color_black, -1,cv.LINE_AA)
  cv.ellipse(img, center_green, (max_r, max_r + 2), 240, 60, 120, color_black, -1,cv.LINE_AA)

  # 右侧蓝色圆【椭圆整体旋转180度】
  cv.circle(img, center_blue, max_r, color_blue, -1,cv.LINE_AA)
  cv.circle(img, center_blue, min_r, color_black, -1,cv.LINE_AA)
  cv.ellipse(img, center_blue, (max_r, max_r + 2), 180, 60, 120, color_black, -1,cv.LINE_AA)

  # 绘制下边的文字
  cv.putText(img, "OpenCV", (0, h - 15), cv.FONT_HERSHEY_DUPLEX, 1.5, color_bg,4)

  # 将原图和自绘图放入一张图片
  create_img = np.zeros((h,w*2,3),np.uint8)
  # 左边原图,右边刚刚绘制的图片
  create_img[:h,:w] = logo
  create_img[:h,w:] = img

  cv.imshow('opencv_logo', create_img)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  draw_opencv_logo()

4. 实现结果

输入图片说明
输入图片说明

5. 总结

  1. 由于图像尺寸不大,所以采用的 lineType 是 cv.LINE_AA,图标看着比较平滑;
  2. 由于原图标的字体没找到,因此在 cv 提供的字体中找了一个比较接近的字体;
  3. 椭圆的 angle 参数是可以控制圆弧的旋转的,因此缺口只需要设置不同旋转角度就好。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 需求分析
  • 2. 目标图像
  • 3. 代码实现
  • 4. 实现结果
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档