Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从另一个图像为不透明部分设置图像透明?_Python_Python 3.x_Image Processing_Python Imaging Library - Fatal编程技术网

Python 如何从另一个图像为不透明部分设置图像透明?

Python 如何从另一个图像为不透明部分设置图像透明?,python,python-3.x,image-processing,python-imaging-library,Python,Python 3.x,Image Processing,Python Imaging Library,我有两个图像:img1和img2,而img2除了图像的一部分外是透明的 使用枕头,如何从img1裁剪img2的不透明部分?因此,我希望获得透明部分的img1,其中img2是不透明的 img1和img2大小相同。您可以将枕头图像转换为NumPy数组,并利用矢量化操作加快处理速度 具有img1.png(完全不透明的随机像素) 和img2.png(完全透明的背景像素,完全不透明的红色像素) 可以使用此方法实现所述行为: 将numpy导入为np 从PIL导入图像 #通过枕头打开图像 img1=Ima

我有两个图像:
img1
img2
,而
img2
除了图像的一部分外是透明的

使用枕头,如何从
img1
裁剪
img2
的不透明部分?因此,我希望获得透明部分的
img1
,其中
img2
是不透明的


img1
img2
大小相同。

您可以将枕头图像转换为NumPy数组,并利用矢量化操作加快处理速度

具有
img1.png
(完全不透明的随机像素)

img2.png
(完全透明的背景像素,完全不透明的红色像素)

可以使用此方法实现所述行为:

将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2.png')
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获取(仅完整)不透明像素作为遮罩
掩码=img2_np[:,:,3]==255
#使遮罩内img1中的像素透明
img1_np[mask,3]=0
#将图像转换回枕头
img1=Image.fromarray(img1\u np)
#保存图像
保存('img1\u mod.png'))
修改后的
img1\u mod.png
如下所示(完全不透明的随机背景像素,在
img2.png
中有红色方块的透明像素):

如果您具有“平滑”透明度,即您的alpha通道具有整个
[0…255]
范围内的值,我们可以修改代码。有这样一个
img2\u smooth.png

这就是修改后的代码:

将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2\u smooth.png'))
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)

#在img2中获取(部分)不透明像素作为遮罩#0#您可以将枕头图像转换为NumPy阵列,并利用矢量化操作加快处理速度

具有
img1.png
(完全不透明的随机像素)

img2.png
(完全透明的背景像素,完全不透明的红色像素)

可以使用此方法实现所述行为:

将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2.png')
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)
#在img2中获取(仅完整)不透明像素作为遮罩
掩码=img2_np[:,:,3]==255
#使遮罩内img1中的像素透明
img1_np[mask,3]=0
#将图像转换回枕头
img1=Image.fromarray(img1\u np)
#保存图像
保存('img1\u mod.png'))
修改后的
img1\u mod.png
如下所示(完全不透明的随机背景像素,在
img2.png
中有红色方块的透明像素):

如果您具有“平滑”透明度,即您的alpha通道具有整个
[0…255]
范围内的值,我们可以修改代码。有这样一个
img2\u smooth.png

这就是修改后的代码:

将numpy导入为np
从PIL导入图像
#通过枕头打开图像
img1=Image.open('img1.png')
img2=Image.open('img2\u smooth.png'))
#将图像转换为NumPy阵列
img1\u np=np.数组(img1)
img2_np=np.数组(img2)

#在img2中获得(部分)不透明像素作为遮罩#0#到目前为止您尝试了什么?@Brian我正在从头到尾(逐行)检查所有像素,并逐像素检查img2中的透明度,它可以工作,但我想知道有没有比这个n^2解决方案更好的解决方案。考虑将您编写的代码添加到您的问题中,并使用一个。到目前为止您尝试了什么?@Brian我正在从头到尾(逐行)检查所有像素,并检查img2中的逐像素和透明度,它可以工作,但我想知道有没有比这个n^2解决方案更好的解决方案。考虑添加您编写的代码,用一个。