【计算机视觉(3)】

news2025/1/11 14:02:59

基于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()        # 显示图像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瑞芯微RV1126——ffmpeg环境搭建

本篇文章来介绍一下,在ubuntu上搭建一个比较完整的ffmpeg环境需要的步骤以及流程。为后期将我们开发的应用程序移植到RV1126开发板上做准备。 在安装ffmpeg之前,为了方便后续的操作,我们可以先搭建好samba服务器。所以本节将分为两个部分&am…

ThingML的学习——在ecplise里面配置maven

前置工作: 1.在ecplise里面配置maven之前,首先需要在windows里面下载maven。 2.配置环境变量 3.修改maven配置文件(最好改为阿里云) 1.配置Java环境,需要jdk版的(jar不行) 以上不在这里面详细介…

ACM实训第十七天

Is It A Tree? 问题 考试时应该做不出来,果断放弃 树是一种众所周知的数据结构,它要么是空的(null, void, nothing),要么是一个或的集合满足以下属性的节点之间有向边连接的节点较多。 •只有一个节点,称为根节点,它…

探索生态农业,守护绿色家园

在繁忙的都市生活中,我们往往忽略了与自然和谐相处的重要性。而生态农业,正是让我们重拾与大自然亲密关系的桥梁。通过采用生态友好的耕作方式,生态农业不仅能够提供健康、营养的农产品,还能够保护生态环境,实现人与自…

登录安全分析报告:创蓝云智注册

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

ubuntu使用记录——如何使用wireshark网络抓包工具进行检测速腾激光雷达的ip和端口号

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言wireshark网络抓包工具1.wireshark的安装2.wireshark的使用3.更改雷达ip 总结 前言 Wireshark是一款备受赞誉的开源网络协议分析软件,其功能之强大…

在做题中学习(61):连续数组

525. 连续数组 - 力扣(LeetCode) 思路:前缀和 哈希表 转化:将 0 ——> -1 转变为:找到和为0的最长子数组 细节: 1.哈希表存什么 前缀和 , 长度 2.什么时候存入哈希表 先处理前一个&…

【LeetCode】【4】寻找两个正序数组的中位数(2105字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2 提示Python实现二分查找划分数组 个人主页:丷从心 系列专栏:LeetCode 刷题指南:LeetCode刷题指南 题目描述 给定两个大小分别为m和n的正序(从小到大)数组nums1…

基于Pytorch框架的卷积神经网络MNIST手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 MNIST手写数字数据集是机器学习领域中的一个经典数据集,它包含了大量的手写数字图…

Pytorch深度学习实践笔记2

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

正则表达式(知识总结篇)

本篇文章主要是针对初学者,对正则表达式的理解、作用和应用 正则表达式🌟 一、🍉正则表达式的概述二、🍉正则表达式的语法和使用三、 🍉正则表达式的常用操作符四、🍉re库主要功能函数 一、🍉正…

【设计模式】JAVA Design Patterns——Balking(止步模式)

🔍目的 止步模式用于防止对象在不完整或不合适的状态下执行某些代码。 🔍解释 真实世界例子 洗衣机中有一个开始按钮,用于启动衣物洗涤。当洗衣机处于非活动状态时,按钮将按预期工作,但是如果已经在洗涤,则…

从零到一:手把手教你将项目部署上线-环境准备

部署步骤 引言1.Java环境配置2.ngnix安装好书推荐 引言 将自己的项目从本地开发环境顺利部署上线,是每个开发者必经的里程碑。今天,我们就从零开始,一步一步教你如何将手中的项目部署到线上,让全世界见证你的创造力。 首先&#x…

3D 高斯泼溅(Gaussian Splatting)-3D重建的3DGS时代

3D重建自从NeRfs出现之后又热闹了一次,3D GS技术一时间燃变了整个三维重建和Slam领域,几个月不见,沧海桑田。 NeRF貌似已成为过去式,三维重建进入了3DGS时代,且3DGS在各方面比NeRF落地更快。3D 高斯泼溅(S…

Payload SDK dji

开发硬件 感谢您的耐心等待,建议您可以考虑下树莓派4B或Jetson Nano开发板,看您需求选择,OSDK即将停止服务,我们建议您使用PSDK来进行开发,PSDK包含了OSDK的功能。Payload SDK 感谢您对大疆产品的支持!祝…

DOS学习-目录与文件应用操作经典案例-type

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…

获取日期区间的所有日期

借助moment.js 转换指定格式,首先安装npm install moment --save methods:{enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等let daysList [];let SDate this.$moment(startDate);let EDate …

CentOS7安装内网穿透实现远程推送镜像到本地Docker Registry

文章目录 前言1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 前言 本文主要介绍如何部署Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现…

顶顶通实时质检系统-黑名单拦截功能配置流程

文章目录 前言联系我们配置流程一、黑名单导入二、白名单导入三、外部黑名单四、靓号规则五、创建拦截规则六、拦截条件七、功能配置 拦截记录与统计拦截记录拦截统计 前言 上篇文章讲解了顶顶通实时质检系统黑名单的功能介绍,本篇文章主要讲解顶顶通黑名单拦截功能…