当前位置: 首页 > news >正文

【计算机视觉(3)】

基于Python的OpenCV基础入门——图形与文字的绘制

    • 图形与文字的绘制:
      • 画线
      • 画矩形
      • 画圆
      • 画多边形
      • 加文字
    • 图形与文字绘制的代码实现:

图形与文字的绘制:

画线

img = cv2.line(img, pt1, pt2, color, thickness)
参数:
img:画布。
pt1:线段的起点坐标。
pt2:线段的终点坐标。
color:绘制线段时的线条颜色。
thickness:绘制线段时的线条宽度。

画矩形

img = cv2.rectangle(img, pt1, pt2, color,thickness)
参数:
img:画布。
pt1:矩形的左上角坐标。
pt2:矩形的右下角坐标。
color:绘制矩形时的线条颜色。
thickness:绘制矩形时的线条宽度。

画圆

img = cv2.circle(img, center, radius, color, thickness)
参数:
img:画布。
center:圆形的圆心坐标。
radius:圆形的半径。
color:绘制圆形时的线条颜色。
thickness:绘制圆形时的线条宽度。

画多边形

img = cv2.polylines(img, pts, isClosed, color, thickness)
参数:
img:画布。
pts:由多边形各个顶点的坐标组成的一个列表,这个列表是
一个numpy的数组类型。
isClosed:如果值为True,表示一个闭合的多边形;如果值为
False,表示一个不闭合的多边形。
color:绘制多边形时的线条颜色。
thickness:绘制多边形时的线条宽度。

加文字

img = cv2.putText(img, text, org, fontFace, fontScale, color, thickness)
参数:
img:画布。
text:要绘制的文字内容。
org:文字在画布中的左下角坐标。
fontFace:字体样式,可选参数如下:
cv2.FONT_HERSHEY_SIMPLEX:正常大小的无衬线字体。(常用)
cv2.FONT_HERSHEY_PLAIN:小号无衬线字体。
cv2.FONT_HERSHEY_DUPLEX:正常大小的无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂。
cv2.FONT_HERSHEY_COMPLEX:正常大小的有衬线字体。
cv2.FONT_HERSHEY_TRIPLEX:正常大小的有衬线字体,比FONT_HERSHEY_COMPLEX更复杂。
cv2.FONT_HERSHEY_COMPLEX_SMALL:FONT_HERSHEY_COMPLEX的小版本。
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写风格的字体。
cv2.FONT_HERSHEY_SCRIPT_COMPLEX:更复杂的手写风格字体。
fontScale:字体大小。
color:绘制文字时的线条颜色。
thickness:绘制文字时的线条宽度

图形与文字绘制的代码实现:

import cv2                         
import matplotlib.pyplot as plt 
import numpy as np  image = cv2.imread("img/cat.jpg")  
image_1 = image.copy()  # 复制一份原图 
image_2 = image.copy()   
image_3 = image.copy()   
image_4 = image.copy()  
image_5 = image.copy()  '''''单独绘制'''  
# 在图片上,绘制一条起点坐标为(50, 50)、终点坐标为(250, 50)、蓝色的、线条宽度为5的线段  
line = cv2.line(image_1, (50, 50), (250, 50), (255, 0, 0), 5)   # 在图片上绘制一个左上角坐标为(50,50)、右下角坐标为(200,150)、青色的、线条宽度为20的矩形边框  
rectangle = cv2.rectangle(image_2, (50, 50), (200, 150), (255, 255, 0), 20)  # 在图片上,绘制一个圆心坐标为(50, 50)、半径为40、红色的实心圆形  
circle = cv2.circle(image_3, (50, 50), 40, (0, 0, 255), -1)  # 顺时针的给出四个顶点,这4个顶点的坐标构成了一个大小等于“顶点个数 * 1 * 2”的数组  
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32) # 这个数组的数据类型为np.int32  
# 在图片上根据4个顶点的坐标,绘制一个闭合的、红色的、线条宽度为5的等腰梯形边框  
polylines = cv2.polylines(image_4, [pts], True, (0,0, 255), 5)  # 在图片上绘制文字“test”,文字左下角的坐标为(20, 70) 字体样式为FONT_HERSHEY_TRIPLEX 字体大小为2,线条颜色是绿色,线条宽度为5  
cv2.putText(image_5, "test", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)  '''''一起绘制'''  
# 绘制线段  
line_ = cv2.line(image, (50, 50), (250, 50), (255, 0, 0), 5)   
# 绘制矩形边框  
rectangle_ = cv2.rectangle(image, (50, 50), (200, 150), (255, 255, 0), 20)  
# 绘制实心圆形  
circle_ = cv2.circle(image, (50, 50), 40, (0, 0, 255), -1)  
# 绘制多边形  
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)   
polylines_ = cv2.polylines(image, [pts], True, (0,0, 255), 5)  
# 在图片上绘制文字“test”  
cv2.putText(image, "test", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)  # opencv是BGR格式的需要转成RGB在matplotlib上进行演示  
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)   
line = cv2.cvtColor(line, cv2.COLOR_BGR2RGB)   
rectangle = cv2.cvtColor(rectangle, cv2.COLOR_BGR2RGB)  
circle = cv2.cvtColor(circle, cv2.COLOR_BGR2RGB)   
polylines = cv2.cvtColor(polylines, cv2.COLOR_BGR2RGB)   
image_5 = cv2.cvtColor(image_5, cv2.COLOR_BGR2RGB)  titles = ["total", "line", "rectangle", "circle", "polylines", "putText"] # 创建一个标题列表  
image_list = [image, line, rectangle, circle, polylines, image_5] # 创建一个图像列表  for i in range(6):  plt.subplot(2, 3, i + 1), plt.imshow(image_list[i], 'gray')  # 在子图中显示对应的图像, 在子图中显示对应的图像(在灰度模式下)。  plt.title(titles[i]) # 对每一个图设置对应的名称  plt.xticks([]), plt.yticks([]) # 不显示x,y轴名称  
plt.show()        # 显示图像

代码实现效果如下图:
在这里插入图片描述

相关文章:

  • Docker 安装最新版MongoDB 限制内存 配置权限
  • 电影《朝云暮雨》观后感
  • SW 草图明显显示
  • C++---运算符重载
  • VUE3好看的酒网站模板源码
  • [猫头虎分享21天微信小程序基础入门教程]第13天:小程序的表单与用户输入处理
  • 9.6 Go语言入门(数组、切片和指针)
  • 深度学习之基于YOLOV5安全帽检测系统
  • k8s基础命令
  • 执行sql脚本——kettle开发03
  • 《深入解析:近邻算法的原理、实现与应用》
  • 自定义类型:结构体
  • 计算机精选期刊特辑
  • 什么是 UUID,uuid
  • Virtuoso IC5141 实验六 全差动运算放大器设计
  • #Java异常处理
  • 77. Combinations
  • CODING 缺陷管理功能正式开始公测
  • GraphQL学习过程应该是这样的
  • HTTP请求重发
  • If…else
  • JavaScript 基本功--面试宝典
  • Magento 1.x 中文订单打印乱码
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Redis 中的布隆过滤器
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue小说阅读器(仿追书神器)
  • 排序算法之--选择排序
  • 前端js -- this指向总结。
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 用jquery写贪吃蛇
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 正则学习笔记
  • 智能网联汽车信息安全
  • AI算硅基生命吗,为什么?
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​渐进式Web应用PWA的未来
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (笔试题)合法字符串
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (含笔试题)深度解析数据在内存中的存储
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)从 Java 代码到 Java 堆
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .java 9 找不到符号_java找不到符号
  • .mysql secret在哪_MySQL如何使用索引
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 中 GetProcess 相关方法的性能
  • .NET的微型Web框架 Nancy