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

发布于:2025-02-11 ⋅ 阅读:(59) ⋅ 点赞:(0)

【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()函数绘制线段的操作技巧。


网站公告

今日签到

点亮在社区的每一天
去签到