如何将2通道图像保存到文件夹?



我正在将两个1通道灰度图像连接成一个2通道图像并将其写入文件夹。

import struct
import zlib     
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
import pandas as pd
import cv2
import numpy as np
import glob
import os
from keras.preprocessing import image
import imageio
filenames1 = glob.glob("folder1/*.png")
filenames1.sort()
filenames2 = glob.glob("folder2/*.png")
filenames2.sort()
for f1,f2 in zip(filenames1,filenames2):
img_name = os.path.basename(f1)
img_name = img_name[:-4] + ".png"
img1 = Image.open(f1)
img2 = Image.open(f2)

img1a = image.img_to_array(img1)
img2a = image.img_to_array(img2)

# Merged image
merge_image = np.concatenate((img1a, img2a), axis=2)
# plt.imsave('folder3/{}.png'.format(img_name[:-4]),merge_image)
imageio.imwrite('folder4/{}.png'.format(img_name[:-4]),merge_image)

当我使用matplotlib的'imsave'函数时,我得到了以下错误:

ValueError: Third dimension must be 3 or 4

当我使用Imageio 'imwrite'函数时,我得到了以下错误:

ValueError: Image must be 2D (grayscale, RGB, or RGBA)

在这种情况下,我如何将2通道图像写入文件夹?

正如您的错误堆栈所说,您不能使用matplotlib.imsaveimageio.imwrite,因为它们仅支持1(灰度),3 (rgb, bgr, hsv等…)或4(与3 + alpha通道相同)。我不知道png格式是否支持2通道,但如果支持,结果将是单通道图像(灰度)+ alpha通道。

解决方案取决于这些图像所代表的内容以及您实际尝试实现的内容:

  • 如果你想保存单通道图像+ alpha通道,你最好复制第一个通道3次,这样你的通道是(BW, BW, BW, alpha)
  • 如果你融合两个空间信息,例如光流的角度和大小,你必须手动进行转换(OpenCV显示2通道图像(光流)),并用其他东西填充剩余的通道。
  • 如果你只是想堆叠两个图像并保存它们,png不是正确的解决方案。您可以使用numpy堆叠它们并将它们保存/存储为.npy对象。

最新更新