python学opencv|读取图像(十八)使用cv2.line创造线段

【1】引言

前序已经完成了opencv基础知识的学习,我们已经掌握了处理视频和图像的基本操作。相关文章包括且不限于:

python学opencv|读取图像(三)放大和缩小图像_python(1)使用opencv读取并显示图像;(2)使用opencv对图像进行缩放;(3)使用o-CSDN博客

python学opencv|读取视频(一)灰度视频制作和保存_python opencv读取视频-CSDN博客 

python学opencv|读取视频(二)制作gif_python opencv 动态照片-CSDN博客 

在此基础上,我们尝试使用opencv创造自己的图像,从最简单的画线段开始。

【2】官网教程

点击下方链接,直达官网教程:

OpenCV: Drawing Functions

 在官网教程页面,我们会看到如下介绍:

图 1

由图1可见,cv2.line()函数的功能是:画线段连接两个点。

然后解释这个函数就非常顺理成章:

void cv::line    (    InputOutputArray    img,   #这是要被画线段的图像,需要提前准备
Point    pt1, #这是线段的第一个点
Point    pt2, #这是线段的第二个点
const Scalar &    color, #这是线段的颜色属性
int    thickness = 1, #这是线段的粗细属性
int    lineType = LINE_8, #这是线段的存储类型
int    shift = 0 ) #点坐标的小数位数,暂无需关注

【3】代码测试

从这里,我们开始测试代码。

首先是要引入必要的模块:

import numpy as np #引入numpy模块
import cv2 as cv #引入cv模块

然后就要先准备一块画布,这块画布就是之后画线段的基础:

canvas=np.zeros((580,580,3),np.uint8) #绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式

然后准备几根线段:

canvas=cv.line(canvas,(50,50),(550,50),(155,120,60),5) #线段
canvas=cv.line(canvas,(50,300),(550,300),(55,190,30),10) #线段
canvas=cv.line(canvas,(50,550),(550,550),(58,50,150),15) #线段
canvas=cv.line(canvas,(300,50),(300,550),(120,150,25),20) #线段

之后把图像展示出来:

cv.imshow('lines',canvas) #在屏幕展示你画线段的效果
cv.waitKey() #图像不会自动关闭
cv.destroyAllWindows() #释放所有窗口

程序运行后的图像为:

图 2

此时的完整代码为:

import numpy as np #引入numpy模块
import cv2 as cv #引入cv模块canvas=np.zeros((580,580,3),np.uint8) #绘制一个580*580大小的画布,3代表有3个通道,unit8为图像存储格式
canvas=cv.line(canvas,(50,50),(550,50),(155,120,60),5) #线段
canvas=cv.line(canvas,(50,300),(550,300),(55,190,30),10) #线段
canvas=cv.line(canvas,(50,550),(550,550),(58,50,150),15) #线段
canvas=cv.line(canvas,(300,50),(300,550),(120,150,25),20) #线段cv.imshow('lines',canvas) #在屏幕展示你画线段的效果
cv.imwrite('line.png',canvas) #保存图像
cv.waitKey() #图像不会自动关闭
cv.destroyAllWindows() #释放所有窗口

 在这里使用了四次cv2.line()函数,绘制了四条线段,线段的颜色和粗细是随机分配的:

canvas=cv.line(canvas,(50,50),(550,50),(155,120,60),5) #以(50,50)和(550,50)为端点的线段
canvas=cv.line(canvas,(50,300),(550,300),(55,190,30),10) #以(50,300)和(550,300)为端点的线段
canvas=cv.line(canvas,(50,550),(550,550),(58,50,150),15) #以(50,550)和(550,550)为端点的线段
canvas=cv.line(canvas,(300,50),(300,550),(120,150,25),20) #以(300,50)和(300,550)为端点的线段

【4】画布颜色设置

在前述学习过程中,我们曾经掌握灰度图的创造:

python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy 创建一张灰度图-CSDN博客

从这里,我们把全1矩阵对应的部分数据改为非0,就实现了黑白灰的过度。

但我们在绘制初始画布的时候,使用了全0矩阵,所以这里稍微改一改,给不同的区域赋不同值,就会有不同颜色的画布:

for i in range(80,500,10):for j in range(80,500,20):canvas[i:i+15,j:j+15]=(i+j)/2 #设置动态像素

这里是在横纵像素坐标80到500的区域,按照[i:i+15,j:j+15]的范围均取值(i+j)/2的形式,改变画布的颜色。

此时获得的图像为:

图 3

【5】总结

掌握了使用python+opencv+cv2.line()函数绘制线段的操作技巧。

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

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

相关文章

unity webgl部署到iis报错

Unable to parse Build/WebGLOut.framework.js.unityweb! The file is corrupt, or compression was misconfigured? (check Content-Encoding HTTP Response Header on web server) iis报错的 .unityweb application/octet-stream iis中添加 MIME类型 .data applicatio…

【深度学习】零基础介绍循环神经网络(RNN)

RNN介绍 零基础介绍语言处理技术基本介绍分词算法词法分析工具文本分类与聚类情感分析 自然语言处理词向量词向量学习模型1. 神经网络语言模型2. CBOW 和 skip-gram3. 层次化softmax方法4. 负采样方法 RNN介绍RNN的变种:LSTM1. Forget Gate2. Input Gate3. Update M…

Docker Compose 安装 Harbor

我使用的系统是rocky Linux 9 1. 准备环境 确保你的系统已经安装了以下工具: DockerDocker ComposeOpenSSL(用于生成证书)#如果不需要通过https连接的可以不设置 1.1 安装 Docker 如果尚未安装 Docker,可以参考以下命令安装&…

面试题整理9----谈谈对k8s的理解1

谈谈对k8s的理解 1. Kubernetes 概念 1.1 Kubernetes是什么 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的…

【JAVA】JAVA接口公共返回体ResponseData封装

一、JAVA接口公共返回体ResponseData封装&#xff0c;使用泛型的经典 例子 public class ResponseData<T> implements Serializable { /** * */ private static final long serialVersionUID 7098362967623367826L; /** * 响应状态码 */ …

Redis分片集群学习总结

Redis分片集群学习总结 为什么要使用分片集群&#xff1f;分片集群搭建Redis集群怎么写入读取数据呢&#xff1f;集群写入数据和读取数据怎么定位到对应的节点呢&#xff1f;怎么让多个数据写入同一个节点&#xff1f; 故障转移主从集群和分片集群使用场景 为什么要使用分片集群…

代理模式(JDK,CGLIB动态代理,AOP切面编程)

代理模式是一种结构型设计模式&#xff0c;它通过一个代理对象作为中间层来控制对目标对象的访问&#xff0c;从而增强或扩展目标对象的功能&#xff0c;同时保持客户端对目标对象的使用方式一致。 代理模式在Java中的应用,例如 1.统一异常处理 2.Mybatis使用代理 3.Spring…

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后&#xff0c;进一步的操作是实现入侵他人电脑&#xff0c;这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址&#xff08;通过伪造的网页、伪造的Windows窗口、hook&#xff0c;信…

windows安装Elasticsearch及增删改查操作

1.首先去官网下载Elasticsearch 下载地址 我这里选择的是7.17.18 选择windows版本 下载完成后解压是这样的 下载完成后点击elasticsearch.bat启动elasticsearch服务 输入http://localhost:9200看到如下信息说明启动成功。 还有记得修改elasticsearch.yml文件&#xff0c;…

aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发

aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发 学习内容&#xff1a; 使用本地EC2中部署docker应用使用ECS的EC2模式进行容器开发使用ECS的Fargate模式进行容器开发 1. 使用本地EC2中部署docker应用 docker整体 这里展示了docker的整体流程。 开发阶段 编写dockerfile…

电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?

电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误&#xff1a;原因与解决方案 在日常电脑使用中&#xff0c;我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件&#xff0c;如CorelDRAW&#xff08;简称CDR&#xff09;时&#xff0c;可能会遇到“计算…

Set集合进行!contains判断IDEA提示Unnecessary ‘contains()‘ check

之前写过一个代码&#xff0c;用到了Set集合&#xff0c;判断了如果某个元素不存在就添加到集合中。今天翻看代码又看到了IDEAUnnecessary contains() check爆黄提示。 来一段测试代码&#xff1a; public class SetTest {public static void main(String[] args) {Set<Int…

以太网帧、IP数据报图解

注&#xff1a;本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式&#xff08;包含相关例题讲解&#xff09; Rebecca.Yan已于 2023-05-27 14:13:19 修改 一、基础知识 UDP 段、IP 数据包&#xff0c;以太网帧图示 通信过程中&…

Java程序打包成exe,无Java环境也能运行

Java程序开发完成后&#xff0c;通常情况下以jar包的形式发布。但有时我们需要给非软件开发人员使用程序&#xff0c;如制作好窗体应用&#xff0c;把它发给没有java开发环境的人使用&#xff0c;此时就需要制作exe安装包。本文介绍如何将java程序制作成exe安装包&#xff0c;并…

华为IPD流程6大阶段370个流程活动详解_第一阶段:概念阶段 — 81个活动

华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…

Linux中Mysql5.7主从架构(一主多从)配置教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集PI-FGSM介绍背景和动机算法原理算法流程 PI-FGSM代码实现PI-FGSM算法实现攻击效果 代码汇总pifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexN…

Hadoop yarn安装

目录 一、环境准备 1、准备三台服务器 2、给三台主机分别配置主机名 3、给三台服务器配置域名&#xff0c;三台配置一样的 4、关闭防火墙 5、创建用户和用户组&#xff0c;三台配置一样的 6、创建安装目录 7、设置免密登录&#xff0c;三台机器都要执行下面的步骤 8、三…

人脸生成3d模型 Era3D

从单视图图像进行3D重建是计算机视觉和图形学中的一项基本任务&#xff0c;因为它在游戏设计、虚拟现实和机器人技术中具有潜在的应用价值。早期的研究主要依赖于直接在体素上进行3D回归&#xff0c;这往往会导致过于平滑的结果&#xff0c;并且由于3D训练数据的限制&#xff0…

MFC用List Control 和Picture控件实现界面切换效果

添加List Control 和Picture控件 添加 3个子窗体 把子窗体边框设置为None, 样式设为Child 声明 CListCtrl m_listPageForm;void ShowForm(int nIndex);void CreatFormList();void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DD…