Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Image_Numpy_Matplotlib - Fatal编程技术网

Python 将单通道图像的像素设置为透明的最简单方法是什么?

Python 将单通道图像的像素设置为透明的最简单方法是什么?,python,image,numpy,matplotlib,Python,Image,Numpy,Matplotlib,我想擦除下图的黑色背景,这意味着将黑色像素设置为透明,就像在.png文件中一样 图像: 此图像是使用以下代码完成的: plt.imshow(地形,cmap='magma') 其中地形是一个(n,n)维NumPy阵列,地形[i,j]在范围(0,9)检查后,我注意到图像中的黑色像素不是完全黑色的。无论如何,您可以尝试以下方法: from matplotlib import pyplot as plt import numpy as np import cv2 img = cv2.imread('

我想擦除下图的黑色背景,这意味着将黑色像素设置为透明,就像在.png文件中一样

图像

此图像是使用以下代码完成的:

plt.imshow(地形,cmap='magma')

其中
地形
是一个
(n,n)
NumPy阵列,
地形[i,j]
范围(0,9)

检查后,我注意到图像中的黑色像素不是完全黑色的。无论如何,您可以尝试以下方法:

from matplotlib import pyplot as plt
import numpy as np
import cv2
img = cv2.imread('test.png')
img_alpha = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
img_alpha[np.where((img==[3,0,0]).all(axis=2))] = [3,0,0,0]
plt.imshow(img_alpha,cmap='magma')

检查后,我注意到你的图像中的黑色像素不是完全黑色的。无论如何,您可以尝试以下方法:

from matplotlib import pyplot as plt
import numpy as np
import cv2
img = cv2.imread('test.png')
img_alpha = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
img_alpha[np.where((img==[3,0,0]).all(axis=2))] = [3,0,0,0]
plt.imshow(img_alpha,cmap='magma')

您可以从整数数组和使用的颜色贴图创建RGBA图像,然后将alpha通道设置为0,以获得您希望透明度的值。然后,可以在Matplotlib的
savefig
命令中设置
transparent=True

下面是一段代码片段:

将numpy导入为np
从matplotlib导入pyplot作为plt
#模型数据
地形=np.0((200200),np.uint8)
地形[20:180,20:180]=np.random.randint(0,10,(160,160))
#从彩色映射灰度数据生成RGBA图像
cmap=plt.get_cmap(“岩浆”)
rgba_img=(cmap(地形/np.max(地形))*255).aType(np.uint8)
#对于地形中的所有0值,将alpha通道设置为0
rgba_img[:,:,3]=(地形>0)*255
#透明输出
plt.图(0,figsize=(5,5))
plt.imshow(rgba_img)
打印轴(“关闭”)
plt.紧_布局()
plt.savefig('output.png',transparent=True)
然后,输出如下所示:

希望有帮助

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.8.1
Matplotlib:3.2.0rc1
NumPy:1.18.1
----------------------------------------

您可以从整数数组和使用的颜色贴图创建RGBA图像,然后将alpha通道设置为0,以获得想要的透明度值。然后,可以在Matplotlib的
savefig
命令中设置
transparent=True

下面是一段代码片段:

将numpy导入为np
从matplotlib导入pyplot作为plt
#模型数据
地形=np.0((200200),np.uint8)
地形[20:180,20:180]=np.random.randint(0,10,(160,160))
#从彩色映射灰度数据生成RGBA图像
cmap=plt.get_cmap(“岩浆”)
rgba_img=(cmap(地形/np.max(地形))*255).aType(np.uint8)
#对于地形中的所有0值,将alpha通道设置为0
rgba_img[:,:,3]=(地形>0)*255
#透明输出
plt.图(0,figsize=(5,5))
plt.imshow(rgba_img)
打印轴(“关闭”)
plt.紧_布局()
plt.savefig('output.png',transparent=True)
然后,输出如下所示:

希望有帮助

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.8.1
Matplotlib:3.2.0rc1
NumPy:1.18.1
----------------------------------------

是否可以在不保存图像的情况下使用
地形
数组?保存是什么意思?在您的代码中,我们阅读了
test.png
图像,在我的问题中,图像信息是一个整数数组,其值可以在
范围(9)
内。这可能需要将崎岖不平的数组保存为图像,然后读取。是否可以使用
地形
数组而不保存图像?保存是什么意思?在您的代码中,我们读取
test.png
图像,在我的问题中,我的图像信息是整数数组,其值可以在
范围(9)
内。这可能需要将凹凸阵列保存为图像,然后读取它。