单通道图像标注
Single channel Image annotation
我正在研究语义分割问题的掩码(标签)生成
我有一个 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)
上面的代码生成一个形状为 245x315x4
的数组,当使用 plt.imread
时,原始数组的形状为 250x321x1
。
首先,如果您只想保存图像,请避免使用 plt.savefig
,而是使用 plt.imsave
(或其他库的替代品,例如 opencv 的 imwrite
,或来自 PIL
的工具,等等)。这样做的原因是实现 plt.savefig
是为了保存整个图形,这意味着保存轴、标签、文本等。此外,它需要一个布尔参数 Transparent
来处理第四个通道。因此,在不知道 plt.savefig
的内部工作原理和确切实现的情况下,可以肯定地说它不应该用于保存灰度图像。
然而,在你的情况下,由于你没有使用 plt.savefig
来绘制除图像本身之外的任何东西,所以有一个简单的解决方法,我将在解决你的问题中的两点之后得出。首先,你的代码是
plt.imshow(data[:, 400:650].T)
但是既然你想要一个灰度图像,你应该设置 cmap="gray"
。二、关于这部分
When storing just a single-channel image in png format, the image is all black
您的问题中没有任何关于 data
中值范围的信息,但我猜这只是“float”与“uint8”数据类型的问题。尝试设置 data.astype(float64)
或者如果使用 uint8
,请确保将其标准化为 [0,255]
而不是 [0,1]
.
现在关于简单的解决方法,一旦您弄清楚如何更正上述问题并保存您的图形,您会注意到在使用 plt.imread
加载图像时您的所有四个通道都具有相同的值(假设您已设置 cmap=gray
),因此您可以只 select 四个通道中的任何一个并丢弃其他通道。
但同样,使用 plt.imsave
或 opencv 是更好的主意。
我正在研究语义分割问题的掩码(标签)生成
我有一个 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)
上面的代码生成一个形状为 245x315x4
的数组,当使用 plt.imread
时,原始数组的形状为 250x321x1
。
首先,如果您只想保存图像,请避免使用 plt.savefig
,而是使用 plt.imsave
(或其他库的替代品,例如 opencv 的 imwrite
,或来自 PIL
的工具,等等)。这样做的原因是实现 plt.savefig
是为了保存整个图形,这意味着保存轴、标签、文本等。此外,它需要一个布尔参数 Transparent
来处理第四个通道。因此,在不知道 plt.savefig
的内部工作原理和确切实现的情况下,可以肯定地说它不应该用于保存灰度图像。
然而,在你的情况下,由于你没有使用 plt.savefig
来绘制除图像本身之外的任何东西,所以有一个简单的解决方法,我将在解决你的问题中的两点之后得出。首先,你的代码是
plt.imshow(data[:, 400:650].T)
但是既然你想要一个灰度图像,你应该设置 cmap="gray"
。二、关于这部分
When storing just a single-channel image in png format, the image is all black
您的问题中没有任何关于 data
中值范围的信息,但我猜这只是“float”与“uint8”数据类型的问题。尝试设置 data.astype(float64)
或者如果使用 uint8
,请确保将其标准化为 [0,255]
而不是 [0,1]
.
现在关于简单的解决方法,一旦您弄清楚如何更正上述问题并保存您的图形,您会注意到在使用 plt.imread
加载图像时您的所有四个通道都具有相同的值(假设您已设置 cmap=gray
),因此您可以只 select 四个通道中的任何一个并丢弃其他通道。
但同样,使用 plt.imsave
或 opencv 是更好的主意。