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

机器视觉学习(十二)—— 绘制图形

目录

一、绘制函数参数说明

1.1 cv2.line()绘制直线

1.2 cv2.rectangle()绘制矩形

1.3 cv2.circle() 绘制圆形

1.4 cv2.ellipse()绘制椭圆

1.5 cv2.polylines()绘制多边形

1.6 cv2.putText() 绘制文字

二、绘制函数使用示例

2.1 在图像上绘制直线

2.2 在图像上绘制矩形

2.3 在图像上绘制圆形

2.4 在图像上绘制椭圆

三、绘制图形函数结合使用


在OpenCV中,我们可以使用几个函数来绘制不同类型的图形,例如直线、矩形、圆形和多边形。下面是几个常用的绘制函数:

一、绘制函数参数说明

1.1 cv2.line()绘制直线

线:              cv2.line(img, ps, pe, color, thickness)img:            要绘制形状的图片ps:             起点位置坐标pe:             终点位置坐标        color:          绘制的颜色thickness:      线宽,默认为 1;对于矩形或者圆之类的封闭形状而言,传入 -1表示填充形状

 

1.2 cv2.rectangle()绘制矩形

矩形:cv2.rectangle(img, ps, pe, color, thickness)img:            要绘制形状的图片ps:             起点位置坐标pe:             终点位置坐标        color:          绘制的颜色thickness:      线宽,默认为 1;对于矩形或者圆之类的封闭形状而言,传入 -1表示填充形状

1.3 cv2.circle() 绘制圆形

圆:              cv2.circle(img, center, radius, color, thickness)img:            要绘制形状的图片center:         圆心坐标radius:         圆的半径值color:          绘制的颜色thickness:      线宽,默认为 1;对于矩形或者圆之类的封闭形状而言,传入 -1表示填充形状

1.4 cv2.ellipse()绘制椭圆

椭圆:cv2.ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)image:          要绘制椭圆的图像center:         椭圆的中心坐标axes:           椭圆的半长轴和半短轴长度angle:          椭圆的旋转角度startAngle:     椭圆弧的起始角度endAngle:       椭圆弧的结束角度color:          椭圆的颜色,可以是RGB值或者一个单一的灰度值thickness:      椭圆的边界粗细,默认为1lineType:       椭圆的边界类型,默认为8连接线shift:          坐标的小数位数,默认为0

1.5 cv2.polylines()绘制多边形

多边形:cv2.polylines(img, pts, isClosed, color, thickness)img:           要绘制图形的图像pts:           多边形的顶点坐标列表isClosed:      指定是否闭合多边形(为True时闭合,为False时不闭合)color:         多边形的颜色(BGR格式)thickness:     多边形的边界线的粗细程度

1.6 cv2.putText() 绘制文字

添加文字:         cv2.putText(img, "text", org, fontface, fontscale, color, thickness)img:            要绘制形状的图片text:           文字内容org:            文字在图像中的左下角坐标fontFace:       字体类型,可选叁数有几种fontScale:      缩放比例,用该值乘以程序字体默认大小即为字体大小color:          绘制的颜色  (可以是一个颜色阈值)thickness:      线宽,默认为 1;对于矩形或者圆之类的封闭形状而言,传入 -1表示填充形状

二、绘制函数使用示例

2.1 在图像上绘制直线

import cv2
import numpy as npimage = np.zeros((500, 500, 3), np.uint8)  # 创建一个黑色的图像image = cv2.line(image, (0, 0), (500, 500), (0, 255, 0), 3)  # 绘制一条绿色的直线cv2.imshow("Line", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2 在图像上绘制矩形

import cv2
import numpy as npimage = np.zeros((500, 500, 3), np.uint8)  # 创建一个黑色的图像image = cv2.rectangle(image, (100, 100), (400, 400), (0, 0, 255), 2)  # 绘制一个红色的矩形cv2.imshow("Rectangle", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 在图像上绘制圆形

import cv2
import numpy as npimage = np.zeros((500, 500, 3), np.uint8)  # 创建一个黑色的图像image = cv2.circle(image, (250, 250), 100, (255, 0, 0), -1)  # 绘制一个蓝色的填充圆cv2.imshow("Circle", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 在图像上绘制椭圆

import cv2
import numpy as npimage = np.zeros((500, 500, 3), np.uint8)  # 创建一个黑色的图像image = cv2.ellipse(image, (250, 250), (100, 200), 0, 0, 360, (255, 255, 0), -1)  # 绘制一个黄色的填充椭圆cv2.imshow("Ellipse", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、绘制图形函数结合使用

示例:

import cv2 as cv
import numpy as npimg = np.zeros((480,480,3),np.uint8)                            # 初始化图像: np.zeros(length, width, 颜色通道数, np.uint8)        
img = cv.line(img,(0,0),(480,480),(0,0,255),5)                  # 画线: cv.line(img, 起点位置坐标, 终点位置坐标, color, 线宽)
img = cv.rectangle(img,(100,100),(300,300),(0,255,0),5)
img = cv.circle(img,(200,200),90,(255,0,0),5)                   # 画圆: cv.rectangle(img, ps, pe, color,传入 -1表示填充形状)
img = cv.putText(img,"xin",(100,90),cv.FONT_HERSHEY_SIMPLEX,1,(255,255,0),2)            # 添加文字      颜色通过BGR表达cv.imshow("img",img)
xin = cv.waitKey(0)
if xin == 27:cv.destroyAllWindows()

运行结果:

 

相关文章:

机器视觉学习(十二)—— 绘制图形

目录 一、绘制函数参数说明 1.1 cv2.line()绘制直线 1.2 cv2.rectangle()绘制矩形 1.3 cv2.circle() 绘制圆形 1.4 cv2.ellipse()绘制椭圆 1.5 cv2.polylines()绘制…...

软考信息处理技术员2024年5月报名流程及注意事项

2024年5月软考信息处理技术员报名入口: 中国计算机技术职业资格网(http://www.ruankao.org.cn/) 2024年软考报名时间暂未公布,考试时间上半年为5月25日到28日,下半年考试时间为11月9日到12日。不想错过考试最新消息的…...

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令,但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写,用于显示文件或目录的磁盘使用情况。du 命令用于查看指…...

MacOS Docker 部署 Redis 数据库

一、简介 Redis是一个开源的、使用C语言编写的、基于内存亦可持久化的Key-Value数据库,它提供了多种语言的API,并支持网络交互。Redis的数据存储在内存中,因此其读写速度非常快,每秒可以处理超过10万次读写操作,是已知…...

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日,小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行,全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付,小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…...

科研 | SCI、SCIE、ESCI、JIF、IF、IEEE Fellow

文章目录 SCISCIESCIE和SCI的区别SCIE和ESCI的区别JIF和IF有什么不同吗?IEEE Fellow SCI 科学引文索引(Science Citation Index,SCI)是由Clarivate Analytics(原Thomson Reuters)维护的一个重要的学术引文…...

10倍提效!用ChatGPT编写系统功能文档。。。

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT,我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…...

【Linux进阶之路】地址篇

文章目录 一、ipv4地址1. 基本概念2. 分类3.CIDR4.特殊的ip地址 二、IP协议1. 协议字段2.分片与重组3.路由 三、NAT技术1.公有和私有2.NAT3.NAPT 四、ARP协议1.MAC地址2.ARP 五、DHCP协议六、DNS协议尾序 一、ipv4地址 1. 基本概念 概念:IP地址,英文全…...

代码随想录第34天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和_哔哩哔…...

Rust线程间通信通讯channel的理解和使用

Channel允许在Rust中创建一个消息传递渠道,它返回一个元组结构体,其中包含发送和接收端。发送端用于向通道发送数据,而接收端则用于从通道接收数据。不能使用可变变量的方式,线程外面修改了可变变量的值,线程里面是拿不…...

Vue3组件基础示例

组件是vue中最推崇的,也是最强大的功能之一,就是为了提高重用性,减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时,我们也会遇到一些常见的功能、模块,那么如何在原生HTML中使用组件化呢&am…...

如何使用PL/SQL Developer工具导出clob字段的表?

1 准备测试数据 导出测试对象:表test_0102,others字段为clob类型 --创建中间表test_0101 create table test_0101( id number, name varchar2(20), others clob);--插入100条测试数据 beginfor i in 1..100 loopinsert into test_0101 values(i,i||_a,l…...

蓝桥杯刷题 深度优先搜索-[NewOJ P1158]N皇后(C++)

题目描述 n皇后问题:n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 上面布局用序列2 4 6 1 3 5表示,第i个数字表示第i行皇后放的列号。 按照这种格式输出前3个解,并统计总解数。 输入格式 输入一个正整数n&a…...

python实例2.2:编写一个装饰器,计算任何一个函数执行的时间(详解及其知识点拓展)

目录 一、编写一个装饰器,计算任何一个函数执行的时间 二、装饰器详解,及其用法举例...

Jenkins 持续集成 【CICD】

持续集成 (Continuous integration,简称CI) 持续集成是一种开发实践,它倡导团队成员频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、打包、部署、自动化测试)来验证&#xff…...

【CHI】(十二)Memory Tagging

目录 1. Introduction 2. Message extensions 3. Tag coherency 4. Read transaction rules 4.1 TagOp values 4.2 Permitted initial MTE tag states 5. Write transactions 5.1 Permitted TagOp values 5.2 TagOp, TU, and tags relationship 6. Dataless transact…...

Vue - 你知道Vue组件之间是如何进行数据传递的吗

难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…...

IP网络对讲广播系统审计

前言 这个系统是前两年在一个内网遇到的,当时顺手试了一个admin登陆之后再没有然后了,最近发现有大佬分享关于这个系统的漏洞,于是就把自己当初看的几个漏洞分享一下,系统比较简单,漏洞点很多,不要做坏事哦…...

蓝桥杯刷题--python38

197. 阶乘分解 - AcWing题库 def init(n): for i in range(2,n1): if not st[i]:primes.append(i) j0 while primes[j]*i<n: st[i*primes[j]]1 if i%primes[j]0: break j1 nint(input(…...

【LeetCode热题100】33. 搜索旋转排序数组(二分)

一.题目要求 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...