【Python Opencv】Opencv画图形

文章目录

  • 前言
  • 一、画图形
    • 1.1 画线
    • 1.2 画矩形
    • 1.3 画圆
    • 1.4 画椭圆
    • 1.5 添加文本
  • 总结


前言

在计算机视觉和图像处理中,OpenCV不仅可以处理图像和视频,还提供了一组功能强大的工具,用于在图像上绘制各种形状和图形。这些功能使得我们能够在图像上标注、分析和突出显示感兴趣的区域。本文将介绍如何使用Python和OpenCV绘制各种图形,包括线条、矩形、圆形等,以及如何添加文本。这对于图像处理和计算机视觉任务中的可视化和分析非常有用。


目标
学习使用 OpenCV 绘制不同的几何形状
您将学习这些函数:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()等。

在上述所有函数中,您将看到一些常见参数,如下所示:

img :要绘制形状的图像
color :形状的颜色。对于 BGR,将其作为元组传递,例如:(255,0,0) 表示蓝色。对于灰度,只需传递标量值即可。
thickness : 线或圆等的厚度如果为圆形等闭合图形传递 -1,它将填充形状。默认厚度 = 1
lineType :线的类型,是否为 8 连接、抗锯齿线等,默认情况下,它是 8 连接的。 cv.LINE_AA提供了抗锯齿线,非常适合曲线。

一、画图形

1.1 画线

函数原型:

cv2.line(img, pt1, pt2, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制线条的图像。
pt1: 线条的起点坐标。
pt2: 线条的终点坐标。
color: 线条的颜色,通常是一个BGR元组,例如 (255, 0, 0) 表示蓝色。
thickness: 线条的宽度,整数值。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)

cv2.imshow('Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.2 画矩形

函数原型:

cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制矩形的图像。
pt1: 矩形的左上角坐标。
pt2: 矩形的右下角坐标。
color: 矩形的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充矩形。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.rectangle(img, (100, 100), (300, 300), (0, 255, 0), 3)

cv2.imshow('Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.3 画圆

函数原型:

cv2.circle(img, center, radius, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制圆形的图像。
center: 圆心坐标。
radius: 圆的半径。
color: 圆的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充圆。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.circle(img, (250, 250), 150, (0, 0, 255), -1)

cv2.imshow('Circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.4 画椭圆

函数原型:

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)

在这里插入图片描述

参数说明:

img: 图像,要在其上绘制椭圆的图像。
center: 椭圆中心坐标。
axes: 长轴和短轴的长度。
angle: 旋转角度。
startAngle: 椭圆弧的起始角度。
endAngle: 椭圆弧的结束角度。
color: 椭圆的颜色,通常是一个BGR元组。
thickness: 线条的宽度,整数值。如果为-1,表示填充椭圆。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
shift: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.ellipse(img, (256, 256), (100, 50), 45, 0, 180, (255, 255, 0), -1)

cv2.imshow('Ellipse', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

1.5 添加文本

  1. 添加文本:

函数原型:

cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)

在这里插入图片描述

参数说明:

img: 图像,要在其上添加文本的图像。
text: 要添加的文本字符串。
org: 文本的起始坐标,即基线左下角的点。
fontFace: 字体类型,例如 cv2.FONT_HERSHEY_SIMPLEX。
fontScale: 字体缩放因子。
color: 文本的颜色,通常是一个BGR元组。
thickness: 文本线条的宽度,整数值。
lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。
bottomLeftOrigin: 如果为 True,则文本原点在左下角;如果为 False(默认),则原点在左上角。
示例代码:

import cv2
import numpy as np

img = np.zeros((512, 512, 3), dtype=np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 300), font, 4, (255, 255, 255), 2, cv2.LINE_AA)

cv2.imshow('Text', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


总结

使用OpenCV绘制图形是进行图像处理和计算机视觉任务中不可或缺的一部分。从简单的线条到复杂的文本,OpenCV提供了丰富的绘图功能。通过本文的介绍,你学会了如何在图像上绘制线条、矩形、圆形和文本,并可以根据需要调整颜色、大小和其他参数。这些技能对于图像分析、目标定位和可视化等任务都非常重要。希望这篇文章能够帮助你更好地利用OpenCV进行图形绘制。

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

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

相关文章

centos利用find提权反弹shell

需要说明的是利用find命令进行提权的方式已经不存在了,因为Linux默认不会为find命令授予suid权限,这里只是刻意的制造出了一种存在提权的环境 首先我们先介绍一下find命令,find命令主要用来在Linux中查找文件使用,它可以进行最基础…

JVM如何运行,揭秘Java虚拟机运行时数据区

目录 一、概述 二、程序计数器 三、虚拟机栈 四、本地方法栈 五、本地方法接口 六、堆 (一)概述 (二)堆空间细分 七、方法区 一、概述 不同的JVM对于内存的划分方式和管理机制存在部分差异,后续针对HotSpot虚…

Brute Force

Brute Force "Brute Force"(暴力破解)指的是一种通过尝试所有可能的组合来获取访问、解密或破解信息的攻击方法。这种攻击方法通常是基于暴力和不断尝试的,不依赖漏洞或弱点。通常用于破解密码、破坏系统或获取未经授权的访问权限…

【数据结构】链表经典OJ题,常见几类题型(二)

目录 题型三:链表相交,找相交节点思路解析OJ题实例解题代码 题型四:链表带环,找入环节点思路解析OJ实例解题代码 题型三:链表相交,找相交节点 思路解析 看到这类题型首先要判断链表是否相交,而…

密钥安全存储方案探讨与实践

随着信息技术的迅猛发展和应用范围的不断扩大,我们日常生活中的许多方面已经与信息技术密不可分。而在信息安全领域中,密钥的安全存储显得尤为重要。本文将探讨密钥安全存储的必要性、相关技术和实践方案,并提出一些解决方案。 一、密钥安全存…

Redis 常用的类型和 API

前言 在当今的软件开发中,数据存储与操作是至关重要的一部分。为了满足日益增长的数据需求和对性能的追求,出现了许多不同类型的数据库。其中,Redis 作为一种基于内存且高性能的键值存储数据库,因其快速的读取速度、丰富的数据结…

进行 “最佳价格查询器” 的开发(多种并行方式的性能比较)

前置条件 public class Shop {private final String name;private final Random random;public Shop(String name) {this.name name;random new Random(name.charAt(0) * name.charAt(1) * name.charAt(2));}public double getPrice(String product) {return calculatePrice…

第4关:非递归实现二叉树左右子树交换

任务描述相关知识 栈的基本操作二叉树后序遍历编程要求测试说明 任务描述 本关任务:给定一棵二叉树,使用非递归的方式实现二叉树左右子树交换,并输出后序遍历结果。 相关知识 为了完成本关任务,你需要掌握:1.栈的基…

PostGIS学习教程一:PostGIS介绍

一、什么是空间数据库 PostGIS是一个空间数据库,Oracle Spatial和SQL Server(2008和之后版本)也是空间数据库。 但是这意味着什么?是什么使普通数据库变成空间数据库? 简短的答案是… 空间数据库像存储和操作数据库中其他任何…

C语言文件操作 | 文件分类、文件打开与关闭、文件的读写、文件状态、文件删除与重命名、文件缓冲区

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

UI 自动化测试框架设计与 PageObject 改造!

在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: 简单的录制/回放速度快,但无法适应复杂场景;编写自动化测试脚本比较灵活,但工作量大且可维护性差;以往的封装技术&#xff…

Metric

如果 Metric ‘use_polarity(使用极性)’ ,则图像中的对象必须和模型具有相同的对比度(Contrast)。比如,如果模型是一个在暗/深色背景上的明亮物体,则仅当对象比背景更亮时才会被找到。 如果 …

塑料质量检测是确保产品制造和装配过程的关键环节

激光塑料透光率检测是一种有效的塑料材料特性检测方法。在激光束通过上层透明材料后,被下层材料吸收。上层材料可以是透明的或者是有颜色的,但是必须能够保证有足够的激光通过。 塑料质量检测是确保产品制造和装配过程的关键环节。通过激光塑料透光率检测…

微博开启下一战:降本增效守利润,垂直内容拓营收

微博的商业想象空间正在逐步打开。 近日,微博披露了2023年三季度财报,营收4.422亿美元,同比下跌3%;调整后净利润1.366亿美元,同比增长17%。但若剔除汇率因素影响,微博的整体业绩仍然保持在正向增长轨道。 …

软考网络工程师知识点总结(二)

目录 21、海明码--差错控制 22、CRC循环冗余校验码 23、网络时延的计算 24、根据距离选择传输介质 25、多模光纤和单模光纤的区别 26、CSMA/CD协议 27、以太网帧结构 28、以太网类型及传输介质的选择 29、交换式以太网(交换机) 30、VLAN虚拟局…

【Python基础】网络编程之Epoll使用一(符实操:基于epoll实现的实时聊天室)

🌈欢迎来到Python专栏 🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mys…

wpf devexpress设置行和编辑器

如下教程示范如何计算行布局,特定的表格单元编辑器,和格式化显示值。这个教程基于前一个文章 选择行显示 GridControl为所有字段生成行和绑定数据源,如果AutoGenerateColumns 属性选择AddNew。添加行到GridControl精确显示为特别的几行设置。…

1688商品采集api接口1688代购商品采集API商品详情数据获取

做小程序商城时,最崩溃的瞬间是什么? 一定是当你有几百件商品,却要一件一件编辑商品名称、规格、上传图片吧…… 为了帮助商家快速上货开店,特意提供了1688的获取商品详情数据的接口,方便商家一键采集淘宝、天猫、京…

电动自动换刀高速电主轴的技术优势浅析

在制造业中,自动化技术的发展一直是一个重要的话题。其中,电动自动换刀被认为是一项高效、智能、先进的技术,在高速电主轴中使用电动自动换刀这一技术,不仅能够缩短换刀时间,还能减少换刀失误,本文将探讨Sy…

Leetcode-110 平衡二叉树

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …