【CV 向】OpenCV 图形绘制指南

文章目录

    • 引言
    • 1. 创建画布
    • 2. 绘制线段
    • 3. 绘制矩形
    • 4. 绘制圆
    • 5. 绘制椭圆
    • 6. 绘制多边形
    • 7. 绘制字体
    • 结论

引言

Python OpenCV 是一个功能强大的计算机视觉库,除了图像处理和计算机视觉任务外,它还提供了丰富的功能来绘制各种图形。无论是在计算机视觉应用中标记感兴趣区域,还是在图像上绘制几何形状或文本,OpenCV 都为我们提供了简单易用的方法。本文将介绍如何利用 Python OpenCV 进行图形绘制。

1. 创建画布

在开始图形绘制之前,我们首先需要创建一个空白的画布。在 OpenCV 中,我们可以使用 cv2.imread() 函数加载图像,或使用 np.zeros() 创建一个空白的图像作为画布。

示例代码:

import cv2
import numpy as np

# 创建一张空白的画布
canvas = np.zeros((500, 500, 3), dtype=np.uint8)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 np.zeros() 函数创建了一个形状为 (500, 500, 3) 的零数组,表示画布的宽度、高度和通道数。然后,我们使用 cv2.imshow() 函数显示画布。

在这里插入图片描述

2. 绘制线段

绘制线段是图形绘制中的基本操作之一。在 OpenCV 中,我们可以使用 cv2.line() 函数绘制线段。

示例代码:

import cv2

# 在画布上绘制一条线段
start_point = (100, 100)
end_point = (400, 400)
color = (0, 0, 255)  # 红色线段
thickness = 3

cv2.line(canvas, start_point, end_point, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.line() 函数在画布上绘制了一条从 (100, 100) 到 (400, 400) 的红色线段。我们还可以通过调整 thickness 参数来设置线段的粗细。

在这里插入图片描述

3. 绘制矩形

绘制矩形是常见的图形绘制操作之一。在 OpenCV 中,我们可以使用 cv2.rectangle() 函数绘制矩形。

示例代码:

import cv2

# 在画布上绘制一个矩形
top_left = (200, 200)
bottom_right = (400, 400)
color = (0, 255, 0)  # 绿色矩形
thickness = 2

cv2.rectangle(canvas, top_left, bottom_right, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.rectangle() 函数在画布上绘制了一个从 (200, 200) 到 (400, 400) 的绿色矩形。我们可以通过调整 thickness 参数来设置矩形的边框粗细。

在这里插入图片描述

4. 绘制圆

绘制圆形也是常见的图形绘制操作之一。在 OpenCV 中,我们可以使用 cv2.circle() 函数绘制圆形。

示例代码:

import cv2

# 在画布上绘制一个圆形
center = (300, 300)
radius = 100
color = (255, 0, 0)  # 蓝色圆形
thickness = -1  # 填充圆形

cv2.circle(canvas, center, radius, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.circle() 函数在画布上绘制了一个以 (300, 300) 为圆心、半径为 100 的蓝色填充圆形。我们可以通过调整 thickness 参数来设置圆形的边框粗细,负值表示填充圆形。

在这里插入图片描述

5. 绘制椭圆

绘制椭圆也是常见的图形绘制操作之一。在 OpenCV 中,我们可以使用 cv2.ellipse() 函数绘制椭圆。

示例代码:

import cv2

# 在画布上绘制一个椭圆
center = (250, 250)
axes = (150, 100)
angle = 0
start_angle = 0
end_angle = 360
color = (0, 255, 255)  # 黄色椭圆
thickness = 2

cv2.ellipse(canvas, center, axes, angle, start_angle, end_angle, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.ellipse() 函数在画布上绘制了一个以 (250, 250) 为中心、长轴为 150、短轴为 100 的黄色椭圆。我们可以通过调整 thickness 参数来设置椭圆的边框粗细。

在这里插入图片描述

6. 绘制多边形

绘制多边形是绘制复杂形状的常见操作。在 OpenCV 中,我们可以使用 cv2.polylines() 函数绘制多边形。

示例代码:

import cv2

# 在画布上绘制一个多边形
points = np.array([[100, 100], [200, 50], [300, 150], [250, 200]], np.int32)
points = points.reshape((-1, 1, 2))
color = (255, 255, 0)  # 青色多边形
thickness = 2

cv2.polylines(canvas, [points], True, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.polylines() 函数在画布上

绘制了一个由多个顶点构成的青色多边形。points 是一个包含多个顶点坐标的数组,我们可以根据需要添加更多的顶点。我们可以通过调整 thickness 参数来设置多边形的边框粗细。

在这里插入图片描述

7. 绘制字体

在图形绘制中,有时需要在图像上添加文本标签。在 OpenCV 中,我们可以使用 cv2.putText() 函数在图像上绘制文本。

示例代码:

import cv2

# 在画布上绘制文本
text = 'OpenCV'
position = (200, 250)
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.5
color = (255, 255, 255)  # 白色文本
thickness = 2

cv2.putText(canvas, text, position, font, font_scale, color, thickness)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述代码中,我们使用 cv2.putText() 函数在画布上绘制了一个白色文本 “OpenCV”,位于 (200, 250) 的位置。我们可以通过调整 font_scale 参数来设置文本的大小,通过调整 thickness 参数来设置文本的粗细。

在这里插入图片描述

结论

通过本文的介绍,我们了解了如何使用 Python OpenCV 进行图形绘制。我们可以创建一个画布,并利用 cv2.line()cv2.rectangle()cv2.circle()cv2.ellipse()cv2.polylines()cv2.putText() 函数绘制线段、矩形、圆形、椭圆、多边形和文本。这些图形绘制操作在计算机视觉任务和图像处理中非常有用。希望本文能够帮助您掌握 Python OpenCV 的图形绘制功能,并在实际项目中应用它们。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot程序开启远程DEBUG

一、远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式,并在调试器中连接到程序所在的调试地址,从而实现对程序的远程调试。 具体步骤如下: 在运行Spring Boot程序时,在启动命令…

软考高级系统架构设计师(四) 计算机网络2磁盘阵列

目录 磁盘阵列RAID RAID级别 ​IPV6 网络接入技术 综合布线 磁盘阵列RAID 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"数块独立磁盘构成具有冗余能力的阵列”之意。 磁盘阵列是由很多块独立的磁盘&#…

P35[10-5]硬件IIC配置+读写MPU6050(软)(此处注意与软件iic区别)

接线图如下: 注:硬件读写iic的连接位置固定,可参考引脚定义表(如下) 声明:I2C1重映射时,有一次更换机会,但是此面包板由于OLED的该引脚无法接线,因此只能接在PB10 PB11的I2C2上 软件iic初始化部分:(此处即可替代掉整个软件iic.c初始化的底层) void MPU6050_Init(vo…

MyCat总结

目录 什么是mycat 核心概念 逻辑库 逻辑表 分片节点 数据库主机 用户 mycat原理 目录结构 配置文件 读写分离 搭建读写分离 搭建主从复制: 搭建读写分离: 分片技术 垂直拆分 实现分库: 水平拆分 实现分库: ER表 全局表 分…

IDEA新UI速览,成了VS Code的样子?

IntelliJ IDEA 2023.1 现已发布。此版本包括对新 UI 的改进,根据从用户那里收到的反馈进行了彻底改造。此外还实现了性能增强,从而在打开项目时更快地导入 Maven 和更早地使用 IDE 功能。由于采用了 background commit checks,新版本提供了简…

【学习学习】NLP理解层次模型

NLP(Neuro-Linguistic Programming,神经语言程序学),由两位美国人理查得.班德勒(Richard Bandler)与约翰.葛瑞德(John Grinder)于1976年创办,并在企业培训中广泛使用。美…

Vue3的计算属性和监听属性

目录 computed 语法介绍 简写版 完整版 watch 介绍 监听ref式数据代码示例 监听reactive式数据 watchEffect函数 computed 语法介绍 与Vue2.x中computed配置功能一致 import {computed} from vuesetup(){...//计算属性——简写let fullName computed(()>{return per…

【C++篇】C++新增的一些基础特性

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

改进YOLOv8 | 优化器篇 | YOLOv8 引入谷歌 Lion 优化器

论文地址:https://arxiv.org/pdf/2302.06675.pdf 代码地址:https://github.com/google/automl/tree/master/lion 我们提出了一种将算法发现作为程序搜索的方法,并将其应用于发现用于深度神经网络训练的优化算法。我们利用高效的搜索技术来探索一个无限且稀疏的程序空间。为了…

2022前端趋势报告(上)

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 一、前言 本文内容来自于《St…

Python在不同领域中的应用

Python 是一种功能强大且易于使用的编程语言,因此在各个领域都有广泛的应用。以下是 Python 在不同领域中的应用: 数据科学:Python 是数据科学家和机器学习专家的首选工具之一。它有成熟的数据分析库和工具包,如 Pandas、NumPy、S…

【前端知识】React 基础巩固(十五)——书籍购物车简单案例

React 基础巩固(十五)——书籍购物车简单案例 案例代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"v…

C国演义 [第六章]

第六章 最长递增子序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长连续递增序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长递增子序列 力扣链接 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&am…

Linux->线程同步

目录 前言&#xff1a; 1 线程同步引入 2 条件变量 2.1 线程饥饿 2.2 条件变量接口 2.3 添加条件变量 3 生产者和消费者模型 前言&#xff1a; 本篇主要讲解了关于线程同步的相关知识&#xff0c;还有生产者和消费者模型的认识和使用。 1 线程同步引入 在讲解线程同步之…

数仓架构“瘦身”,Hologres 5000CU时免费试用

Hologres基于创新的HSAP架构&#xff0c;可以将您原先数仓架构中的OLAP系统&#xff08;Greenplum、Presto、Impala、ClickHouse&#xff09;、KV数据库/Serving系统&#xff08;HBase、Redis&#xff09;统一在一个大数据计算引擎中&#xff0c;并提供快速的离线实时一体化分析…

智能家居APP软件开发有何优势?

传统家居行业营销模式已经无法满足现代人多样化个性化的需求&#xff0c;也跟不上互联网时代的发展步伐了&#xff0c;很多传统家居行业都陷入了营销困境。通过智能家居APP软件开发&#xff0c;可以利用互联网改造传统模式&#xff0c;探索新的发展模式&#xff0c;可以说智能家…

近期煤矿事故及电力综合自动化系统的介绍

安科瑞虞佳豪 5月29日&#xff0c;山西灵石红杏鑫鼎泰煤业有限公司发生一起死亡1人的安全事故&#xff1b;5月24日&#xff0c;山西华阳集团新能股份有限公司二矿发生一起死亡1人的安全事故。 ​山西省应急管理厅、山西省地方煤矿安全监督管理局责令山西灵石红杏鑫鼎泰煤业有…

【设计模式与范式:总结型】74 | 总结回顾23种经典设计模式的原理、背后的思想、应用场景等

到今天为止&#xff0c;23 种经典的设计模式已经全部讲完了。咱们整个专栏也完成了 3/4&#xff0c;马上就要进入实战环节了。在进入新模块的学习之前&#xff0c;我照例带你做一下总结回顾。23 种经典设计模式共分为 3 种类型&#xff0c;分别是创建型、结构型和行为型。今天&…

经典的设计模式21——策略模式

文章目录 策略模式 猛的发现策略模式和状态模式的结构图长得到好像&#xff0c;可得好好区分区分。 不过真的好像&#xff0c;就是方法那里传递的参数不一样。 百度来一波。 策略模式 定义&#xff1a; 定义了算法家族&#xff0c;分别封装起来&#xff0c;让他们之间可以互…

智能无线监测器的工作原理及应用优势

在现代工业生产中&#xff0c;设备状态监测对于确保生产的安全性、效率和可靠性至关重要。随着科技的不断发展&#xff0c;智能无线监测器成为工业设备状态监测的利器。本文将介绍智能无线监测器在工业领域中的应用&#xff0c;以及其带来的优势和价值。 图.设备状态监测&#…