OpenCV 绘图函数:在图像上绘制线条、矩形和圆形等形状

news/2024/5/8 11:39:55/文章来源:https://blog.csdn.net/qq_38334677/article/details/129192316

目录

目标

代码

画线

绘制矩形

画圈

绘制椭圆

绘制多边形

结果


注,各个效果图,后续补充

目标

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

代码

在上述所有绘图函数中,您将看到一些常见的参数,包括:

  • img:要绘制形状的图像
  • 颜色:形状的颜色。对于 BGR,将其作为元组传递,例如:(255, 0, 0) 表示蓝色。对于灰度,只需传递标量值。
  • thickness:线或圆等形状的粗细。对于封闭图形,如果将其设置为-1,则会填充形状。默认厚度为1。
  • lineType:线路类型,可以设置为8连线、抗锯齿线等。默认为8连线。cv.LINE_AA表示抗锯齿线,它看起来很适合曲线的绘制。

画线

要绘制一条线,您需要指定线的起点和终点坐标。下面是一个示例,我们将创建一个黑色图像,并在其上绘制一条蓝线,该线从左上角到右下角延伸。

import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)

这行代码使用了 OpenCV 中的 cv.line() 函数,用于在图像上绘制一条直线。具体来说,它的参数如下:

  • img:要绘制直线的图像,可以是空白图像。
  • (0, 0):直线的起点坐标,这里是 (0, 0),即图像的左上角。
  • (511, 511):直线的终点坐标,这里是 (511, 511),即图像的右下角。
  • (255, 0, 0):直线的颜色,这里是蓝色,用 BGR 格式表示为 (255, 0, 0)
  • 5:直线的宽度,即粗细程度,这里是 5 个像素。

因此,该行代码的作用是在一个大小为 512x512 的空白图像上绘制一条从左上角到右下角的蓝色线条。

绘制矩形

要绘制矩形,您需要指定矩形的左上角和右下角坐标。下面是一个示例,我们将在图像的右上角绘制一个绿色矩形:

cv.rectangle(img,(384,0),(510,128),(0,255,0),3)

这行代码使用了 OpenCV 中的 cv.rectangle() 函数,用于在图像上绘制一个矩形。具体来说,它的参数如下:

  • img:要绘制矩形的图像。
  • (384,0):矩形左上角的坐标。
  • (510,128):矩形右下角的坐标。
  • (0,255,0):矩形的颜色,这里是绿色,用 BGR 格式表示为 (0,255,0)
  • 3:矩形的线宽,即边框粗细程度,这里是 3 个像素。

因此,该行代码的作用是在给定图像上绘制一个左上角坐标为 (384,0),右下角坐标为 (510,128),颜色为绿色,边框宽度为 3 个像素的矩形。

画圈

要绘制圆,您需要指定圆心坐标和半径。下面是一个示例,我们将在前面绘制的矩形内绘制一个圆形:

cv.circle (img,(447,63), 63, (0,0,255), -1)

绘制椭圆

要绘制椭圆,需要传递几个参数。其中一个是中心位置 (x,y),另外两个参数是轴的长度(长轴和短轴长度)。此外,angle 表示椭圆沿逆时针方向旋转的角度,而 startAngle 和 endAngle 表示从长轴顺时针方向测量的椭圆弧的起点和终点,如果指定的值为 0 和 360,则会绘制整个椭圆。有关更多信息,请参阅cv.ellipse()函数的文档。下面是一个示例,在图像的中心绘制了一个半椭圆:

cv.ellipse (img,(256,256),(100,50),0,0,180,255,-1)

绘制多边形

要绘制多边形,首先需要指定多边形的各个顶点的坐标,然后将这些点放入形状为 ROWSx1x2 的数组中,其中 ROWS 是顶点数,应为 int32 类型。下面是一个示例,我们在图像上绘制了一个带有四个黄色顶点的小多边形:

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines (img,[pts], True ,(0,255,255))

如果将 cv.polylines() 函数的第三个参数设置为 False,则将绘制一条连接所有点的折线,而不是封闭的形状。

另外,cv.polylines() 函数也可用于绘制多条线。只需创建一个包含所有要绘制的线条的列表并将其传递给函数即可。所有线条都将单独绘制。与为每条线条分别调用 cv.line() 函数相比,这种方法可以更好更快地绘制一组线条。

要将文本添加到图像中,需要指定以下内容:

  • 要写入的文本数据
  • 要放置文本的位置坐标(即数据开始的左下角坐标)
  • 字体类型(查看 cv.putText() 函数的文档以了解支持的字体)
  • 字体比例(指定字体的大小)
  • 其它常规选项,如颜色、线条粗细、线型等。为了让文本更美观,建议使用 lineType = cv.LINE_AA。

下面是一个示例,我们在图像上使用白色字体写上 OpenCV:

font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

结果

所以是时候看看我们绘图的最终结果了。正如您在以前的文章中学习的那样,显示图像以查看它。

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

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

相关文章

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (五)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

复现SCI文章:配对连线、散点箱线图

今天我们要复现的是一篇SCI文章的配对连线箱线图,配对箱线图、或者说配对连线图我们之前有写过(ggplot做分组配对连线图、ggplot2|ggpubr配对箱线图绘制与配对检验、复现NC图表-配对小提琴的绘制(理解绘图函数内部底层机制)&#…

关于用windows开发遇到的各种乌龙事件之node版本管理---nvm install node之后 npm 找不到的问题

友情提醒,开发最好用nvm控制node版本 nrm 控制镜像源,能少掉很多头发开发过程中技术迭代更新的时候最要老命的就是 历史项目的node版本没有记录,导致开启旧项目的时候就会报错。尤其是npm 升级到8.x.x以后,各种版本不兼容。 真…

Homekit智能家居DIY一WIFI智能插座

WiFi智能插座对于新手接触智能家居产品更加友好,不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷,智能插座就是其中之一,比如外出忘记关空调,可以拿起手机远程关闭。 简单说就是:插座可以连接wi…

VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image)

VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image) VMware ESXi 7.0 Update 3k Standard & All Custom Image for ESXi 7.0 U3k Install CD 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作品…

ChatGPT爆火:AI崛起,这些职场人的机遇到了?

ChatGPT最近真的被全球吃瓜群众玩坏了! 回答情感问题,编写代码,撰写slogan或脚本,甚至还被用于毕业生论文…… 这个连马斯克都由衷地称赞的ChatGPT,是一种全新的聊天机器人模型。上线2个月,就拥有了上亿活…

04--WXML

1、什么是WXML什么是Wxml呢?我们首先要介绍一下Html,Html的全称为HyperTextMarkup Language,翻译过来就是超文本标记语言,这种语言目前已经普遍用于前端开发,而wxml正是从html演变而来,它基于微信这个平台&…

SQL server设置用户只能访问特定数据库、访问特定表或视图

在实际业务场景我们可能需要开放单独用户给第三方使用,并且不想让第三方看到与业务不相关的表或视图,我们需要在数据库中设置一切权限来实现此功能: 1.设置用户只能查看数据库中特定的视图或表 1.创建用户名 选择默认数据库 服务器角色默认…

__stack_chk_fail问题分析

一、问题进程收到SIGABRT信号异常退出,异常调用栈显示__stack_chk_fail*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: Pico/A7H10/PICOA7H10:10/5.5.0/smartcm.1676912090:userdebug/dev-keys Revision: 0 ABI: arm64 Times…

Web前端学习:一

编辑器的基础使用 编辑器推荐使用: HBuilderx(免费中文)(建议使用) Sublime(免费英文) Sublime中文设置方法,下载语言插件: 1、进入Sublime后,ShiftCtrlP…

wait/notify方法 等待唤醒机制

线程正在运行,调用这个线程的wait()方法,这个线程就会进入一个集合进行等待(这个集合的线程不会争抢cpu),此时线程的状态就是waiting 当有线程调用notify()方法的时候,就会从集合中挑选一个线程进入到排队队列里面 notifyAll就是…

【样式】轮播图样式 uview 版本 : “2.0.31“

![在这里插入图片描述](https://img-blog.csdnimg.cn/6cd568ce932b4ea7ae52f10365979680.png html <view class"addSwiperdiv"><image src"/static/66.png" mode"aspectFill" class"titleimg"></image><view c…

VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)

目录 1、动态加载dll库去调用库中的函数 1.1、调用系统dll库中未公开的接口 1.2、调用控件库中的注册接口向系统中注册该控件 2、LoadLibrary动态加载dll库失败的场景 2.1、自制安装包中遇到的LoadLibrary加载dll库失败问题 2.2、主程序底层模块调用LoadLibrary加载dll库…

秒杀测试案例 Java Redis Mysql

基于redis和MySQL乐观锁实现秒杀优惠券场景&#xff0c;一人一单。MySQL乐观锁改良控制不出现超卖和少卖问题&#xff0c;使用redisson分布式锁在用户维度加锁控制一人一单。 源码&#xff1a;https://github.com/hanhanhanxu/SeckillTest 文中图片看不清的地方可以鼠标右键-&…

谷歌外推留痕,谷歌搜索留痕快速收录怎么做出来的?

本文主要分享谷歌搜索留痕的收录效果是怎么做的&#xff0c;让你对谷歌留痕技术有一个全面的了解。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这样的行为吧。 谷歌搜索留痕快速收录怎么做出来的&#xff1f; 答案是&#xff1a;通过谷歌蜘蛛…

C语言-结构体对齐

详细说明参考博客 (1条消息) C语言结构体对齐&#xff0c;超详细&#xff0c;超易懂_haozigegie的博客-CSDN博客 (1条消息) #pragma pack详解_OuJiang2021的博客-CSDN博客_#pragma pack 以下个人理解总结 出现结构体对齐考虑的根本原因就是&#xff1a;【数据存取执行效率】…

Openwrt中动态IPV6 防火墙的正确设置方法

环境&#xff1a;光猫桥接公网IPV6 问题&#xff1a;动态IPV6地址不知道怎么设置防火墙 解决办法&#xff1a;模糊匹配前缀&#xff0c;特定后缀 背景&#xff1a;将家中光猫桥接后&#xff0c;获得了公网的IPV6地址&#xff0c;可以从外部用IPV6访问家中的设备&#xff0c;但I…

【AI写作】 机器人流程自动化 介绍 - Robotic Process Automation (RPA) Introduction

写一篇文章介绍RPA技术,未来的发展。使用markdown格式,有3级索引,超过3000字。 某位大师说过的: 任何行业、任何部门都有大量的场景,涉及重复、有规则逻辑的工作,都可以用 RPA 开发一个软件机器人帮助完成。 文章目录 机器人过程自动化(RPA)简介RPA的定义RPA的好处Robo…

【centos7下部署mongodb】

一.安装环境 CentOS7MongoDB4.0.13正式版。 二.下载MongoDB 1.1 官网下载地址&#xff1a;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.13.tgz 1.2 将压缩包通过xftp上传到服务器/opt目录&#xff0c;然后解压、改名 三. 配置环境变量及配置文件 3.1配置系…

有限差分法求解不可压NS方程

网上关于有限差分法解NS方程的程序实现不尽完备&#xff0c;这里是一些补充注解 现有的优秀资料 理论向 【1】如何从物理意义上理解NS方程&#xff1f; - 知乎 【2】NS方程数值解法&#xff1a;投影法的简单应用 - 知乎 【3】[计算流体力学] NS 方程的速度压力法差分格式_…