Python 单通道图像标注

Python 单通道图像标注,python,matplotlib,computer-vision,data-annotations,semantic-segmentation,Python,Matplotlib,Computer Vision,Data Annotations,Semantic Segmentation,我正在为语义分割问题生成掩码(标签) 我有一个250x321的NumPy数组。这是一个单通道图像。我必须给这张图片加注释。但由于这是一个单通道图像,因此在尝试以matplotlib.pyplot的正常模式保存图像时,尺寸会随着通道(4)的更改而更改。仅以png格式存储单通道图像时,图像为全黑色,因此无法对图像进行注释 因此,我无法注释png格式图像(全黑),也无法使用正常的matplotlib.pyplot保存功能(Dim随通道变化) 有人能建议我如何完成这项工作吗 我使用了下面给出的代码 pl

我正在为语义分割问题生成掩码(标签)

我有一个
250x321
的NumPy数组。这是一个单通道图像。我必须给这张图片加注释。但由于这是一个单通道图像,因此在尝试以
matplotlib.pyplot
的正常模式保存图像时,尺寸会随着通道(4)的更改而更改。仅以
png
格式存储单通道图像时,图像为全黑色,因此无法对图像进行注释

因此,我无法注释
png
格式图像(全黑),也无法使用正常的
matplotlib.pyplot
保存功能(Dim随通道变化)

有人能建议我如何完成这项工作吗

我使用了下面给出的代码

plt.imshow(data[:, 400:650].T)
plt.tight_layout()
plt.xticks([])
plt.yticks([])
plt.axis('off')
plt.savefig('/content/new.png',bbox_inches='tight', pad_inches=0.0)

当使用
plt.imread
时,上面的代码正在生成一个shape
245x315x4
数组。当原始数组中的shape
250x321x1
时,imread首先,如果您只想保存图像,请避免使用
plt.savefig
而使用
plt.imsave
(或其他库的替代品,例如opencv的
imwrite
,或
PIL
中的工具等)原因是
plt.savefig
用于保存整个图形,这意味着保存轴、标签、文本等。此外,它采用布尔参数
Transparent
,将处理第四个通道。因此,在不知道
plt.savefig
的内部工作原理和确切实现的情况下,它是安全的我敢打赌,它不应该被用来保存灰度图像

但是,在您的情况下,由于您没有使用
plt.savefig
来绘制图像本身以外的任何内容,因此在讨论了您问题中的两点之后,我将介绍一种简单的解决方法。首先,您的代码是

plt.imshow(data[:, 400:650].T)
但由于您需要灰度图像,因此应设置
cmap=“gray”
。其次,关于此部分

仅以png格式存储单通道图像时,图像为全黑色

您的问题中没有关于
数据中的值范围的任何信息,但我猜这只是“float”与“uint8”数据类型的问题。请尝试设置
数据.astype(float64)
,或者如果使用
uint8
,请确保在
[0255]
中对其进行规范化,而不是
[0,1]

现在,关于简单的解决方法,一旦您了解了如何纠正上述问题并保存了图形,您就会注意到,当使用
plt.imread
加载图像时,您的四个通道都具有相同的值(假设您设置了
cmap=gray
),因此您可以选择四个通道中的任何一个,然后丢弃其他通道


但同样,使用
plt.imsave
或opencv是一个更好的主意。

这可能是一些问题,例如数据类型(图像是frloat还是int)问题。但是,没有任何代码很难帮助您。在这种特殊情况下,您应该创建一个最小的可复制示例()@Ash,我已经编辑了问题并添加了代码,请查看