四时宝库

程序员的知识宝库

使用 OpenCV 绘图和写作(opencv画图工具)

在本文中,我们将学习如何使用 OpenCV 在图像上绘制和书写。绘图是计算机视觉中的常见例程,用于突出显示和标记图像的重要部分。例如,如果要标记图像中的所有汽车,则需要在它们周围绘制正方形。

在本文中,我们将介绍

  1. 画一条线
  2. 绘制圆和椭圆
  3. 绘制多边形
  4. 文字写作

1. 画一条线

当我们想要突出显示图像中的一些重要线条时,会使用画线。交通线是我们要突出显示线的情况的很好的例子。函数 cv2.line 有五个参数:我们要绘制的图像、起点、终点、线条粗细和线条颜色。我们将在空白图像上画一条线:

img = cv2.imread('/content/drive/MyDrive/sheet.png')
print(img.shape) #=> (480, 720, 3)

#Defining starting point, ending point, thickness and color
start_point = (0,0)
end_point = (720,480)
color =  (0,140,255) #Orange RGB
thikness = 6

img = cv2.line(img, start_point, end_point, color, thickness)

cv2.imshow(img)

正如我们所看到的,我们绘制的线从图像的第一个像素开始,到最后一个像素结束,我们还应该注意颜色是在 BGR 系统中给出的。

2. 圆和椭圆绘制

当然,圆形和椭圆有自己的实现,它们是cv2.circle和cv2.ellipse。因此,让我们深入了解代码。

2.1 画一个圆

circle 函数包含五个参数:我们要绘制的图像、圆心、圆的半径、圆的颜色和线条的粗细。我们现在将在空白图像上画一个圆圈。

#center of the circle
center = (150,150)
#circle radius
radius = 150
#blue color in BGR system
color = (255, 0, 0)
#line thickness
thickness = 2

cv2.circle(img,center,radius,color,thickness)
cv2_imshow(img)

正如我们所看到的,如果我们知道圆心的位置及其半径,那么画一个圆就非常简单了。

2.2 绘制椭圆

另一侧的椭圆是更复杂的几何体,因此将比圆吸收更多的参数。该函数接受八个参数:我们要绘制的图像、椭圆的中心、轴长度、角度、起始角度、结束角度、颜色和厚度。

解释这些的最好方法是首先绘制一个椭圆,看看当我们改变它们时会发生什么。

#center of the ellipse
center = (150,150)
axesLength = (100, 50)
  
angle = 0
startAngle = 0
endAngle = 360 
# Red color in BGR
color = (0, 0, 255)
# Line thickness of 5 px
thickness = 5
   
# Using cv2.ellipse() method
# Draw a ellipse with red line borders of thickness of 5 px
image = cv2.ellipse(img, center, axesLength,
           angle, startAngle, endAngle, color, thickness)

这是下面的结果,所以让我们一一解释参数。中心参数表示日食的中心,非常不言自明。轴的长度基本上决定了椭圆的宽度和高度,所以让我们切换它们,看看我们得到什么。

axesLength = (50, 100)

image = cv2.ellipse(img, center, axesLength,
           angle, startAngle, endAngle, color, thickness)

如我们所见,图像的高度和宽度已经切换。使用角度参数,我们决定要以哪个角度(以度为单位)显示椭圆。让我们尝试 30 度的角度。

angle = 30

image = cv2.ellipse(img, center, axesLength,
           angle, startAngle, endAngle, color, thickness)

我们已经成功地将椭圆旋转了 30 度。起始角度和结束角度基本上告诉我们要显示多少椭圆,因此,例如,如果我们想要整个椭圆,则需要通过将起始角度设置为 360 并将结束角度设置为 0 来完成所有 360 度。例如,如果我们要显示椭圆的前半部分,我们会将起始角设置为 0,将结束角设置为 180 度。

startAngle = 0
endAngle = 180

image = cv2.ellipse(img, center, axesLength,
           angle, startAngle, endAngle, color, thickness)

厚度和颜色之前已经介绍过。正如我们所看到的,绘制椭圆也非常简单,您只需要使用参数即可掌握它的窍门。

3. 多边形绘制

多边形是由直线组成的任何形状,可以在平坦的表面上绘制,例如一张纸。这些形状包括正方形、矩形、三角形和五边形,但不包括圆形或任何其他包含曲线的形状。

我们将使用 OpenCV 的 cv2.polylines 函数,它采用五个位置参数:我们要绘制的图像、要连接的点的坐标、可以为真或假的 isClosed 参数,它确定我们定义的第一个和最后一个点是否会连接,然后最后两个参数是线条的颜色和粗细

3.1 绘制正方形

这个想法是定义空间中 4 个点的坐标,让我们将彼此之间的距离设置为 300 像素。下面的代码给我们画了一个正方形:

import numpy as np
import cv2
from google.colab.patches import cv2_imshow

# defining coordinates of points
points =  np.array([[0,0],[0,300],[300,300],[300,0]])

color = (255, 0, 0)
thickness = 2
isClosed = True

# drawPolyline
image = cv2.polylines(img, [points], isClosed, color, thickness)

cv2_imshow(image)

如果我们将参数 isClosed 设置为 false,结果如下:

正如我们所看到的,我们定义的第一个和最后一个点没有连接。使用 cv2.折线,我们可以绘制三角形、矩形、六边形、八边形,基本上任何由直线组成且没有任何曲线的形状。

4. 文本

我们将在本主题中介绍的最后一个是写作。OpenCV也为我们提供了这方面的服务。该函数称为cv2.putText,它需要七个参数:我们要写入的图像,文本,文本位置的坐标,字体,字体比例,颜色和粗细。让我们跳入代码。

# coordinates
coord = (100, 100)

font = cv2.FONT_HERSHEY_SIMPLEX

# fontScale
fontScale = 1
   
# Blue color in BGR
color = (255, 0, 0)
  
# Line thickness of 2 px
thickness = 2
   
# Using cv2.putText() method
image = cv2.putText(img, 'OpenCV', coord, font, 
                   fontScale, color, thickness)
   
# Displaying the image
cv2_imshow(image)

我们应该注意,所有字体都可以在OpenCV文档中找到。当我们想要在图像中显示某种消息或显示图像处理中发生的某种测量时,通常会在图像上书写。

结论

在图像处理中绘图可能是您可以做的最简单和最简单的事情,但它是一个重要的部分,尤其是在涉及某些检测问题时,我们将在本系列文章的后面看到。归根结底是熟悉这些功能并对其进行试验。我们鼓励您在接下来的几周内继续关注,因为我们将使用到目前为止学到的东西来解决一些现实生活中的问题。



原文标题:Drawing and Writing with OpenCV

原文链接:https://rubikscode.net/2022/06/06/drawing-and-writing-with-opencv/

作者:Stefan Nidzovic/Milos Marinkovic

编译:LCR

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接