计算机视觉:1.4、绘画

这篇博客介绍了如何利用OpenCV库在Python中创建和绘制图像。首先通过NumPy生成一个黑色画布,然后展示了如何使用cv2.line、cv2.rectangle和cv2.circle函数分别画直线、矩形和圆。文章详细解释了各个函数的参数,并提供了多个示例,包括不同颜色、宽度和填充效果。最后,还展示了如何随机生成多个彩色圆点的实现代码。
摘要由CSDN通过智能技术生成
绘画

在之前的计算机视觉:三、图像基础中介绍了如何在一幅图像中画一个蓝色的矩形,那么如果我们如果想画一条直线,一个圆呢?我们应该如何进行呢?我们就不能再用NumPy来操作了,而是用OpenCV

​ 本文将展示如何利用openCV库来画直线、矩形和圆。

直线

​ 接下来的所有操作都将再会一副我们自己定义的画布上进行,我们可以利用NumPy数组自己定义一个画布(图像),因为openCV将一副图片解释为一个NumPy,所以我们没理由不能通过定义数组的方式来创造一副图像。

新建draw.py文件,写入如下代码

import cv2
import numpy as np

canvas = np.zeros((300, 300), np.uint8)
cv2.imshow("canvas", canvas)
cv2.waitKey(0)

执行draw.py,结果如下。

image-20211006121642811

可以看到我们用np.zeros()方法生成了一个大小为300✖️300✖️3的矩阵,其中每一个像素的值都是0,每个像素都通过8位无符号整数(np.uint8)来表示。而像素值为0则对应着黑色,所以我们生成了一张300✖️300的全黑色图像。

​ 这里需要说明,像素的值我们一般都会用8位无符号数据类型来表示,但是这也有一些问题,无符号整数只能用来表示整数,因为其没有符号位,而当我们需要表示一个负数的时候,我们则需要用浮点数来表示,这点后面遇到的时候在做说明。

现在让我们画一条直线吧。

这里我们需要调用cv2.line方法:

cv2.line(image,startPoint,endPoint,color,thickness)

image:这条直线画在的那幅图像

startPoint:一个坐标元组,表示直线的起点

endPoint:一个坐标元组,表示直线的终点

color:一个色彩元组,表示直线的颜色【要注意openCV表示颜色的方式(b,g,r)】

thickness:整数,表示直线的宽度,可以不填。

import cv2
import numpy as np


canvas = np.zeros((300, 300, 3), np.uint8)

green = (0, 255, 0)
cv2.line(canvas, (0,0), (300, 300), green)
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)

上面几行代码,定义了一条从点(0,0)到点(300,300)的绿色直线

执行效果如下,可以看到一条绿色细直线平分了整个画布,一条红色的粗直线横向贯穿了整个画布

image-20211006122702733

画一条直线看起来非常的简单,那么如果我们要画一个矩形呢?

现在让我们画一个矩形吧。

这里我们需要调用cv2.rectangle方法:

cv2.rectangle(image,startPoint,endPoint,color,thickness)

image:这个矩形画在的那幅图像

startPoint:一个坐标元组,表示矩形的起点

endPoint:一个坐标元组,表示矩形的终点

color:一个色彩元组,表示矩形的颜色【要注意openCV表示颜色的方式(b,g,r)】

thickness:整数,表示矩形直线的宽度,可以不填;为负数时表示填充整个矩形。

上代码:

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), np.uint8)

blue = (255, 0, 0)
red = (0, 0, 255)
green = (0, 255, 0)
cv2.rectangle(canvas, (0,0), (100,100), blue)
cv2.rectangle(canvas, (100,100), (200,200), red, 3)
cv2.rectangle(canvas, (200,200), (300,300), green, -1)

cv2.imshow("Canvas",canvas)
cv2.waitKey(0)

这里我们一个画了三个矩形:

第1个矩形起点为(0,0),终点为(100,100),颜色为蓝色,线条宽度为默认。

第2个矩形起点为(100,100),终点为(200,200),颜色为红色,宽度为3。

第3个矩形起点为(200,200),终点为(300,300),颜色为绿色,并且填充整个矩形。

代码执行结果如下

image-20211006123523268

接下来让我们一起来画一个圆吧。

这里我们需要调用cv2.circle方法:

cv2.circle(image,center,radius, color,thickness)

image:这个圆画在的那幅图像

center:一个坐标元组,表示圆的圆心

radius:整数,表示圆的半径大小

color:一个色彩元组,表示圆的颜色【要注意openCV表示颜色的方式(b,g,r)】

thickness:整数,表示圆直线的宽度,可以不填;为负数时表示填充整个矩形。

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), np.uint8)

blue = (255, 0, 0)
red = (0, 0, 255)
green = (0, 255, 0)

center = (canvas.shape[1] // 2, canvas.shape[0] // 2)
cv2.circle(canvas, center, 150, blue)
cv2.circle(canvas, center, 100, red, 3)
cv2.circle(canvas, center, 50, green, -1)

cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

在上上面的代码中,我们一共画了三个圆,圆心均位于(height//2,width//2)处:

第1个圆颜色为蓝色,半径为150,线条宽度为默认。

第2个圆颜色为红色,半径为100,宽度为3。

第3个圆颜色为绿色,半径为50,并且填充整个圆。

程序执行结果如下:

image-20211006124930873

最后让我们做一件有趣的事情:在随机位置生成随机大小随机颜色的圆。

import cv2
import numpy as np

canvas = np.zeros((300, 300, 3), np.uint8)

for i in range(0, 25):
    radius = np.random.randint(5, high=200)
    color = np.random.randint(0, high=256, size=(3,)).tolist()
    pt = np.random.randint(0, high=300, size=(2,))
    cv2.circle(canvas, tuple(pt), radius, color, -1)

cv2.imshow("Canvas", canvas)
cv2.waitKey(0)

上面的代码利用NumPy随机数生成了25个随机的圆。

我们需要随机生成三个值:半径、圆心和颜色。

我们通过指定[5, hight=200]来控制我们圆的大小

而在随机颜色值的时候,我们为了得到三个随机数,我们向方法传入了一个关键的参数(3,),说明Numpy需要返回一个包含三个数的列表。

同样的,我们在生成圆心的时候指定了大小[0,hight=300],返回一个包含2个随机数的列表

执行程序,结果如下:

image-20211006125938586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值