Numpy 如何为numpy数组创建一个圆形掩模

Numpy 如何为numpy数组创建一个圆形掩模

在计算机视觉和图像处理中,圆形掩模经常被用来过滤图像、分割图像以及计算图像的统计信息等。通过 numpy,我们可以很容易地创建一个圆形掩模。

阅读更多:Numpy 教程

创建一个空白的数组

首先,我们需要创建一个和要过滤的图像相同大小的空白数组来存储圆形掩模。因此,我们需要使用 numpy 的 zeros 函数来创建一个全为 0 的数组。例如,我们可以使用以下代码来创建一个 500×500 像素的数组:

import numpy as np

ary = np.zeros((500, 500))
Python

创建一个圆形掩模

接下来,我们可以使用 numpy 的 meshgrid 函数来创建一个网格。这个网格包含了在数组中每个像素位置的 x 和 y 坐标值。例如,我们可以使用以下代码来创建一个包含数组中每个元素的坐标值的数组:

y, x = np.meshgrid(np.arange(500), np.arange(500))
Python

接着,我们需要计算圆形掩模中心位置的坐标,并根据这个位置和半径值计算出掩模。例如,我们可以使用以下代码来计算从数组中心开始的 100 像素半径的圆形掩模:

cx, cy, r = 250, 250, 100
mask = ((x - cx)**2 + (y - cy)**2) < (r**2)
Python

上述代码中,我们首先定义了圆形掩模的圆心坐标 cxcy,并定义了掩模的半径 r。下一行代码将计算出每个像素位置到圆心位置的距离,然后将距离平方与半径平方进行比较,得出哪些位置在圆形内。最后,我们得到了一个布尔类型的数组,其中圆形内的像素为 True,圆形外的像素为 False。

将圆形掩模应用到图像中

现在,我们已经成功地创建了一个圆形掩模。我们可以使用这个掩模来过滤图像,只保留在圆形内的像素。例如,假设我们有一张 500×500 像素的图像,我们可以使用以下代码来创建一个圆形掩模,并将其应用到图像中:

import cv2

img = cv2.imread('image.jpg')
mask = np.zeros((500, 500), dtype=np.uint8)
cx, cy, r = 250, 250, 100
cv2.circle(mask, (cx, cy), r, (255, 255, 255), -1)
img_masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('Original Image', img)
cv2.imshow('Circular Mask Applied', img_masked)
cv2.waitKey(0)
cv2.destroyAllWindows()
Python

上述代码中,我们首先使用 OpenCV 的 imread 函数来读取一张名为 image.jpg 的图像,并使用 numpy 创建一个和图像大小相同的圆形掩模 mask。接着,我们使用 OpenCV 的 circle 函数来将圆形掩模应用到掩模中,并将掩模赋值为255,即完全填充。最后,我们使用 OpenCV 的 bitwise_and 函数来将圆形掩模应用到原始图像中,并显示结果。

总结

在本文中,我们介绍了如何使用 numpy 和 OpenCV 来创建一个圆形掩模以及如何将其应用到图像中。通过使用这个圆形掩模,我们可以过滤、分割或计算图像的统计信息,无形中提高了我们对图像的处理能力。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册