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

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.kler.cn/a/448520.html

相关文章:

  • 浅析InnoDB引擎架构(已完结)
  • Neo4j 图数据库安装与操作指南(以mac为例)
  • 使用 Buildroot 构建带有 Avahi 支持的 Linux 系统
  • JavaWeb期末复习(习题)
  • P1305 新二叉树
  • 全速下载 50M/S,不限速下载就是香
  • js导出Excel(图片大小,数据转换,导出后面添加现在的时间 )
  • Vue的响应式基础
  • Go 语言并发实战:利用协程处理多个接口进行数据融合
  • 常耀斌:深度学习和大模型原理与实战(深度好文)
  • 【漫话机器学习系列】012.深度学习(Deep Learning)基础
  • Webpack的打包过程/打包原理/构建流程?
  • Unity Shader学习日记 part 1 基础知识
  • 广义正态分布优化算法(GNDO)Generalized Normal Distribution Optimization
  • LeetCode 力扣 热题 100道(二十)三数之和(C++)
  • Unity 6 Preview(预览版)新增功能
  • windows下srs流媒体服务器使用ffmpeg推流
  • 鸿蒙项目云捐助第十八讲云捐助我的页面下半部分的实现
  • c# iis 解决跨域问题
  • 对象克隆与单例模式的实现
  • 硬件工程师面试题 11-20
  • 【WRF教程第3.6期】预处理系统 WPS 详解:以4.5版本为例
  • 使用插件时要注意
  • C语言——实现字符分类统计
  • Linux 使用的小细节
  • Webpack简单介绍及安装