OpenCV-Python实战(5)——图形绘制基础

news2024/12/27 14:53:58

一、直线

cv2.line(img=*,pt1=*,pt2=*,color=*,thickness=*,lineType=LINE_8)

img:绘图的背景(画布)。

pt1、pt2:始/终点坐标,格式为元组()。

color:直线颜色,BGR格式。

thickness:线宽,默认为:1。

lineType:线条样式。默认为LINE_8。

import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画三条线,连接成三角形
cv2.line(img=res,pt1=(20,20),pt2=(180,20),color=(255,0,0),thickness=2)
cv2.line(img=res,pt1=(180,20),pt2=(180,180),color=(0,255,0),thickness=2)
cv2.line(img=res,pt1=(180,180),pt2=(20,20),color=(0,0,255),thickness=2)
cv2.imshow('line',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

二、矩形

cv2.rectangle(img=*,pt1=*,pt2=*,color=*,thickness=*,lineType=LINE_8)

pt1、pt2:矩形的左上角和右下角坐标,格式为元组()。

import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画矩形
cv2.rectangle(img=res,pt1=(20,20),pt2=(180,180),color=(255,0,0))
cv2.rectangle(img=res,pt1=(50,50),pt2=(150,150),color=(255,0,0))
cv2.rectangle(img=res,pt1=(80,80),pt2=(120,120),color=(255,0,0))
cv2.imshow('rectangle',res)
cv2.imwrite('rectangle.png',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

三、圆

cv2.circle(img=*,center=*,radius=*,color=*,thickness=*,lineType=LINE_8)

img:绘图的背景(画布)。

center:圆的中心点坐标,格式为元组()。

radius:圆的半径。

color:直线颜色,BGR格式。

thickness:线宽,默认为:1。-1 表示实心圆

lineType:线条样式。默认为LINE_8。

import cv2
import numpy as np
# 建立一个(200,200)白色画布
res = np.ones((200,200,3),dtype=np.uint8)*255
# 在白色画布上画圆
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=80,color=(255,0,0))  # 空心
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=50,color=(255,0,0))  # 空心
cv2.circle(img=res,center=(int(res.shape[0]/2),int(res.shape[1]/2)),radius=30,color=(255,0,0),thickness=-1)  #实心
cv2.imshow('circle',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

 四、椭圆

cv2.ellipse(img=*,center=*,axes=*,angle=*,startAngle=*,endAngle=*,color=*,thickness=*,lineType=LINE_8)

center:椭圆的中心点坐标,格式为元组()。

axes:轴的长度。

angle:椭圆偏移角度(长轴与X轴的夹角)。

startAngle,endAngle:始/终点的角度0~360。

import cv2
import numpy as np
from numpy.ma.core import arange

# 建立一个(400,400)白色画布
res = np.ones((400,400,3),dtype=np.uint8)*255
# 在白色画布上画椭圆
for i in arange(0,360,30): # 每隔30度画一个椭圆
    color = np.random.randint(0,255,3).tolist()  # 生成随机色彩
    cv2.ellipse(img=res,center=(200,200),axes=(80,150),angle=i,startAngle=0,endAngle=360,color=color)
cv2.imshow('ellipse',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

五、多边形

cv2.polylines(img=*,pts=*,isClosed=*,color=*,thickness=*,lineType=LINE_8)

pts:含多边形顶点坐标的Numpy数组 list[]。 点的坐标顺序很重要

isClosed:是否封闭,首尾点的坐标相连。

import cv2
import numpy as np
from numpy.ma.core import arange

# 建立一个(200,400)白色画布
res = np.ones((200,400,3),dtype=np.uint8)*255
# 在白色画布上画多边形
pts1=np.array([[50,50],[150,50],[150,150],[50,150]])
pts2=np.array([[250,50],[350,50],[350,150],[250,150]])
cv2.polylines(img=res,pts=[pts1],isClosed=True,color=(255,0,0))  # 封闭
cv2.polylines(img=res,pts=[pts2],isClosed=False,color=(0,0,255)) # 开放
cv2.imshow('ploylines',res)

cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

[原创](Modern C++)现代C++的第三方库的导入方式: 例如Visual Studio 2022导入GSL 4.1.0

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共23年] 职业生涯: 21年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…

vue3----思维导图

介绍:这是一个前端思维导图展示的插件,以及下载svg功能,内部用的scss,不一样的需要改一下,整体也没写太复杂。 效果: 依赖: {"markmap-common": "^0.14.2","markmap…

.NET 8.0 项目升级到 .NET 9.0

本文项目从.NETCore3.1开始一直延续到目前,如果您没有升级过,请参考以下文章: .Net Core 2.2 升级到 .Net Core 3.1:https://blog.csdn.net/hefeng_aspnet/article/details/131259537 NetCore3.1或Net6.0项目升级到Net7.0&#x…

第23天:信息收集-APP应用产权渠道服务资产通讯抓包静态提取动态调试测试范围

#知识点 1、信息收集-APP应用-公开信息-知识产权&开发者定位 2、信息收集-APP应用-资产信息-抓包&静态提取&动态调试 一、APP渗透测试的范围->应涵盖APP所有功能和组件,包括但不限于以下几个方面: 1、前端安全:包括界面交互、…

Virtualbox安装ubuntu20虚拟机无法打开终端

用Virtualbox安装ubuntu20系统,安装好之后,无法打开终端; 原因:语言设置导致的问题; 修改方法:将/etc/default/locale里LANG这行的值修改为:en_US.UTF-8即可; 步骤:先在…

PH热榜 | 2024-12-25

1. Assistive24 标语:为残障人士提供的免费辅助技术 介绍:Assistive24 是一款免费的 Chrome 浏览器扩展程序,可以帮助患有注意力缺陷多动障碍 (ADHD)、阅读障碍 (dyslexia) 和低视力等障碍的用户更方便地浏览网页。它提供语音导航、自定义…

Torch.gather

1.官方文档 2.使用要点 输入index的shape等于输出value的shape输入index的索引值仅替换该index中对应dim的index值最终输出为替换index后在原tensor中的值 最终输出的shape和index的shape相同 根据dim的值 选择将index[i,j,k]这个结果替换input[i,j,k]里面对应的i or j or…

Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3)

Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现马赛克效果,Kotlin(3) import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas impor…

音乐极客的新玩具:香橙派Zero3快速搭建Melody个人音乐平台

文章目录 前言1. 添加镜像源2. 本地部署Melody3. 本地访问与使用演示4. 安装内网穿透5. 配置Melody公网地址6. 配置固定公网地址 前言 今天要给喜欢听音乐的朋友们介绍一个超酷的DIY项目,在香橙派Zero3上使用Melody搭建自己的个人在线音乐平台,并且借助…

如何从 0 到 1 ,打造全新一代分布式数据架构

导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一…

elementPlus消息组件多按钮案例

let customClass zsl-el-message-box efb.messageBox({title: 操作提示,showConfirmButton: false,customClass,message: efb.VNode(div, null, [efb.VNode(style, null, .${customClass} .el-message-box__message {width: 100%;}),efb.VNode(div, null, hello world),efb.VN…

MATLAB符号计算-符号表达式基础运算操作

1.1.2符号变量取值域的限定 默认复数域 【例1-1-2】解不等式 1.1.3创建符号表达式 对符号对象进行各种运算(算术运算、关系运算、逻辑运算),即可创建符号表达式。 1.算术运算与转置 【例1-1-3】 f5是f4的共轭转置 f6是f4的转置 2.关系…

使用Excel制作通达信自定义外部数据,安排!!!

Excel相信大家电脑上都有这个工具,相比敲编程代码,用这个去做自定义数据对大多数人,应该是比较友好的。自定义数据分为外部序列数据,看了一下内容理解起来比较多,分两期给大家介绍。为了照顾电脑基础薄弱的朋友&#x…

SwiftUI 入门趣谈:在文本框(TextField)内限制数字的输入

概述 虽然 SwiftUI 本身提供了海量内置的原生视图供我们使用,但对于某些情况我们还需要根据实际需求“量体裁衣、专属定制”。 在日常的撸码场景中,我们有时需要限制文本框(TextField)中数字内容的输入,如何又简单又快…

深入浅出 MyBatis | CRUD 操作、配置解析

3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致! 比如将 UserDao 改名为 UserMapper 运行发现抱错,这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口,接下来一一对…

基于c语言的union、字符串、格式化输入输出

结构体之共用体union 共用体也叫联合体,其关键词为union 与结构体不同的是,共用体所开辟的存储空间仅仅为其中最长类型变量的存储空间而不是全部变量的存储空间,由于同一内存单元在同一时间内只能存放其中一种的数据类型,因此在每…

IntelliJ Idea常用快捷键详解

文章目录 IntelliJ Idea常用快捷键详解一、引言二、文本编辑与导航1、文本编辑2、代码折叠与展开 三、运行和调试四、代码编辑1、代码补全 五、重构与优化1、重构 六、使用示例代码注释示例代码补全示例 七、总结 IntelliJ Idea常用快捷键详解 一、引言 在Java开发中&#xff…

AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用,今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机(SVM)是一种监督学习算法,广泛用于分类和回归问题。 它的核心思想是通过…

Linux-----进程处理(子进程创建)

【尚硅谷嵌入式Linux应用层开发,linux网络编程,linux进程线程,linux文件io】https://www.bilibili.com/video/BV1DJ4m1M77z?p35&vd_source342079de7c07f82982956aad8662b467 main函数 fork创建进程 fork()参数 /*** brief 创建一个子进…

一种寻路的应用

应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节: 全国的长途车车站的数据的更新: …