欢迎访问宙启技术站
智能推送

通过skimage.util库在Python中进行图像的边缘检测和轮廓提取

发布时间:2024-01-12 16:28:41

边缘检测和轮廓提取是图像处理中常用的技术之一,用于在图像中找出物体的边缘和轮廓。在Python中,可以使用skimage(scikit-image)库中的util模块来进行边缘检测和轮廓提取。以下是一个使用例子:

首先,我们需要安装skimage库,可以使用pip命令进行安装。

pip install scikit-image

接下来,导入所需的库和模块:

from skimage import io
from skimage.filters import roberts, sobel
from skimage.measure import find_contours
import matplotlib.pyplot as plt

然后,我们使用skimage的io模块来读取一张图片:

image = io.imread('example_image.jpg', as_gray=True)

在以上代码中,as_gray=True参数表示将图片转换为灰度图像。

接下来,我们使用skimage的roberts和sobel函数对图像进行边缘检测:

edges_roberts = roberts(image)
edges_sobel = sobel(image)

roberts函数使用Roberts算子进行边缘检测,sobel函数使用Sobel算子进行边缘检测。

然后,我们可以使用skimage的find_contours函数来提取图像的轮廓:

contours = find_contours(image, 0.5)

find_contours函数的 个参数是图像,第二个参数是阈值,用于控制轮廓的灵敏度。

最后,我们可以使用matplotlib库来显示图像和提取的边缘和轮廓:

plt.figure(figsize=(8, 4))

plt.subplot(121)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

plt.subplot(122)
plt.imshow(edges_sobel, cmap='gray')
plt.title('Edges (Sobel Operator)')
plt.axis('off')

for contour in contours:
    plt.plot(contour[:, 1], contour[:, 0], linewidth=2, color='red')

plt.tight_layout()
plt.show()

以上代码中,plt.subplot函数用于创建一个包含两个子图的图像窗口。 个子图显示原始图像,第二个子图显示使用Sobel算子提取的边缘。plt.imshow函数用于显示图像,plt.title函数用于设置子图标题,plt.axis函数用于隐藏坐标轴。最后,使用plt.plot函数来绘制提取的轮廓。

运行以上代码,我们可以看到一个包含原始图像、提取的边缘和轮廓的图像窗口。通过调整阈值参数和边缘检测算子,我们可以得到不同灵敏度的轮廓结果。

使用skimage.util库在Python中进行图像的边缘检测和轮廓提取非常简单和直观。该库提供了多种边缘检测算子和轮廓提取函数,可以满足不同的需求。通过结合其他图像处理函数和库,可以实现更复杂的图像处理任务。