【发布时间】:2025-12-02 00:15:01
【问题描述】:
我有一张图像,我在skimage.measure.find_contours() 上找到了轮廓,但现在我想为完全超出最大闭合轮廓的像素创建一个蒙版。知道怎么做吗?
修改文档中的示例:
import numpy as np
import matplotlib.pyplot as plt
from skimage import measure
# Construct some test data
x, y = np.ogrid[-np.pi:np.pi:100j, -np.pi:np.pi:100j]
r = np.sin(np.exp((np.sin(x)**2 + np.cos(y)**2)))
# Find contours at a constant value of 0.8
contours = measure.find_contours(r, 0.8)
# Select the largest contiguous contour
contour = sorted(contours, key=lambda x: len(x))[-1]
# Display the image and plot the contour
fig, ax = plt.subplots()
ax.imshow(r, interpolation='nearest', cmap=plt.cm.gray)
X, Y = ax.get_xlim(), ax.get_ylim()
ax.step(contour.T[1], contour.T[0], linewidth=2, c='r')
ax.set_xlim(X), ax.set_ylim(Y)
plt.show()
这是红色的轮廓:
但是如果你放大,注意轮廓不是像素的分辨率。
如何创建与原始图像尺寸相同且像素完全位于外部(即未与轮廓线相交)被遮盖的图像?例如
from numpy import ma
masked_image = ma.array(r.copy(), mask=False)
masked_image.mask[pixels_outside_contour] = True
谢谢!
【问题讨论】:
标签: python contour scikit-image masked-array