Ned*_*der 20 python numpy image-processing
我正在使用numpy来构建像素数组.800x600图像是uint8,800x600x3的三维数组.我也有一个固定模式的类似阵列(棋盘,见这里).我有另一个数组,800x600的掩码值.在掩模为零的情况下,我想将图案像素复制到图像像素.在掩模不为零的情况下,我想单独保留图像像素.
>>> image.shape
(800, 600, 3)
>>> chex.shape
(800, 600, 3)
>>> mask.shape
(800, 600)
这感觉它应该工作:
image[mask == 0,...] = chex
但是给出了"ValueError:数组不能播放到正确的形状".
我该怎么用来将chex像素复制到mask为零的图像像素?
unu*_*tbu 23
idx=(mask==0)
image[idx]=chex[idx]
注意image有形状(800,600,3),而idx形状(800,600).索引状态的规则
如果选择元组小于n,那么尽可能多:根据需要将对象添加到选择元组的末尾,以便修改的选择元组具有长度N.
因此索引数组具有自己的一种广播能力.idx的形状被提升为(800,600,:)
我想用@unutbu 答案来说明一个例子。在这种情况下,我旋转了一张猫的图像。这种旋转会导致一些黑色边缘看起来很难看,尤其是粘贴在非黑色背景上时。
import matplotlib.pyplot as plt
from scipy.ndimage import rotate
cat = plt.imread('cat.jpeg')
bg = plt.imread('background.jpeg')
rotcat = rotate(cat, angle=8, reshape=True) ## rotating creates some black edges
height, width, _ = rotcat.shape
bgcopy = bg.copy() ## create a copy of the background; paste on copy
x, y = 40, 50 
bgcopy[x:x+height, y:y+width] = rotcat
plt.imsave('cat-on-bg-mask.jpg', bgcopy)
因此,我找到蒙版的区域并将这些值替换为原始背景值
mask_ind = (bgcopy == 0)
bgcopy[mask_ind] = bg[mask_ind]
plt.imsave('cat-on-bg.jpg', bgcopy)
我还应该注意到PIL.Image(来自Pillow库)能够以更少的步骤将图像粘贴到另一个图像上。
| 归档时间: | 
 | 
| 查看次数: | 21855 次 | 
| 最近记录: |