我已将图像加载到Python的scikit-image库中。 我还创建了与图像尺寸相同的蒙版,现在我想将蒙版与图像相交,以仅显示蒙版不为零的图像像素。如何在不逐像素迭代的情况下做到这一点?
我是否仅将蒙版应用于图像,如:
new_image = image[mask]
或者我可以将两个图像阵列相乘以逐像素相乘吗?
答案 0 :(得分:1)
按元素乘法确实可以完美地工作:
from skimage import data
from matplotlib import pyplot as plt
image = data.coins()
mask = image > 128
masked_image = image * mask
fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2)
ax0.imshow(image, cmap='gray')
ax1.imshow(masked_image, cmap='gray')
注释1 :您的代码示例不是scikit图像问题,而是NumPy索引问题,将不执行您想要的操作,而是返回所有像素的线性数组,其中{{ 1}}是mask
。有关更多信息,请参见NumPy documentation on boolean indexing。
注释2 :您还可以使用scikit-image保存图像:
True
答案 1 :(得分:0)
您可以这样做:
from skimage import data
import numpy as np
from PIL import Image
# Load coins data-set
im = data.coins()
# Make mask of where image is less than mid-grey
mask = im<128
# Set image black everywhere it was less than mid-grey
im[mask] = 0
# Set image mid-grey everywhere it was mid-grey or brighter
im[~mask] = 128
# Convert to PIL image and save
Image.fromarray(im).save('result.png')
硬币的原始图像:
结果图像: