Numpy 如何在数组中画线

Numpy 如何在数组中画线

在Numpy中,我们可以使用一些函数来在数组中绘制线条。这些函数使用的是Bresenham算法,这是一种基于随机取样的算法,其目标是在网格上绘制一条连续的线。

阅读更多:Numpy 教程

1. 画一条直线

在Numpy中,我们可以使用numpy.zeros()函数来生成一个全0的数组。下面是如何在数组中画一条直线的示例代码:

import numpy as np
import matplotlib.pyplot as plt

def draw_line(img, pt1, pt2, color):
    """
    在数组中画一条直线
    :param img: 数组
    :param pt1: 直线起点
    :param pt2: 直线终点
    :param color: 线颜色
    """
    x1, y1 = pt1
    x2, y2 = pt2
    dy = y2 - y1
    dx = x2 - x1

    if abs(dx) > abs(dy):
        yy = np.linspace(y1, y2, abs(dx) + 1)
        xx = np.linspace(x1, x2, abs(dx) + 1)
    else:
        yy = np.linspace(y1, y2, abs(dy) + 1)
        xx = np.linspace(x1, x2, abs(dy) + 1)

    for x, y in zip(xx, yy):
        img[int(round(y)), int(round(x))] = color

img = np.zeros((512, 512))
pt1 = (50, 50)
pt2 = (200, 250)
color = 255
draw_line(img, pt1, pt2, color)

plt.imshow(img, cmap='gray')
plt.show()

在这个示例中,我们使用numpy.linspace()函数来生成一个起点是pt1,终点为pt2的线段。然后,我们使用round()函数将坐标四舍五入到最接近的整数,并在这些点中绘制一条线。

2. 画一条多边形

在Numpy中,我们可以使用numpy.polyline()函数来绘制一个多边形。下面是如何在数组中绘制一个多边形的示例代码:

import numpy as np
import matplotlib.pyplot as plt

def draw_polygon(img, pts):
    """
    在数组中画一个多边形
    :param img: 数组
    :param pts: 多边形的顶点
    """
    pts = np.array(pts, np.int32)
    pts = pts.reshape((-1, 1, 2))
    cv2.polylines(img, [pts], True, (255, 255, 255))

img = np.zeros((512, 512, 3), np.uint8)
pts = [[10, 10], [50, 60], [100, 20], [150, 100], [50, 200]]
draw_polygon(img, pts)

plt.imshow(img)
plt.show()

在这个示例中,我们首先使用numpy.array()函数把多边形的顶点转换为Numpy数组。然后,我们使用numpy.reshape()函数将多边形的顶点转换为(n, 1, 2)的形状,其中n是多边形的顶点数。最后,我们使用numpy.polylines()函数在数组中绘制多边形。

3. 画一个矩形

在Numpy中,我们可以使用numpy.rectangle()函数来绘制一个矩形。下面是如何在数组中绘制一个矩形的示例代码:

import numpy as np
import matplotlib.pyplot as plt

def draw_rectangle(img, pt1, pt2, color):
    """
    在数组中画一个矩形
    :param img: 数组
    :param pt1: 矩形左上角
    :param pt2: 矩形右下角
    :param color: 颜色
    """
    cv2.rectangle(img, pt1, pt2, color, -1)

img = np.zeros((512, 512, 3), np.uint8)
pt1 = (50, 50)
pt2 = (200, 200)
color = (255, 0, 0)
draw_rectangle(img, pt1, pt2, color)

plt.imshow(img)
plt.show()

在这个示例中,我们使用numpy.zeros()函数和numpy.uint8数据类型创建一个三通道的全零数组。然后,我们使用cv2.rectangle()函数在数组中绘制一个矩形。

4. 画一个圆形

在Numpy中,我们可以使用numpy.circle()函数来绘制一个圆形。下面是如何在数组中绘制一个圆形的示例代码:

import numpy as np
import matplotlib.pyplot as plt

def draw_circle(img, center, radius, color):
    """
    在数组中画一个圆形
    :param img: 数组
    :param center: 圆心
    :param radius: 半径
    :param color: 颜色
    """
    cv2.circle(img, center, radius, color, -1)

img = np.zeros((512, 512, 3), np.uint8)
center = (256, 256)
radius = 100
color = (0, 255, 0)
draw_circle(img, center, radius, color)

plt.imshow(img)
plt.show()

在这个示例中,我们使用numpy.zeros()函数和numpy.uint8数据类型创建一个三通道的全零数组。然后,我们使用cv2.circle()函数在数组中绘制一个圆形。

总结

在本文中,我们介绍了在Numpy中绘制线条、多边形、矩形和圆形的方法。这些函数使用的是Bresenham算法,使用起来非常方便。在实际应用中,我们可以使用这些函数进行图像处理、计算机视觉等操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程