[英]When reading B/W image as Numpy array using OpenCV I get different results than reading as an image
我的最終用戶正在讀取圖像,將它們轉換為灰度並將它們打包成 H5 文件,例如 numpy arrays 使用以下代碼:
image = Image.open(imageFilename)
greyscaleImage = image.convert("L")
imageData = np.asarray(greyscaleImage)
if convertTo16Bit:
imageData16bit = imageData.astype(np.uint16)
imageData16bit = imageData16bit*8
imageData = imageData16bit
h5Filename = makeFilename(imageId, appendToName)
h5FullPath = os.path.join(filePath, h5Filename)
h5file = h5py.File(h5FullPath, "w")
dset = h5file.create_dataset("image", data=imageData)
然后我按如下方式閱讀了這些 H5 文件:
if args.file_types == 'image':
image = cv2.imread(os.path.join(args.input, filename), cv2.IMREAD_COLOR)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
elif args.file_types == 'h5, hdf5':
hf = h5py.File(os.path.join(args.input, filename), "r")
key = list(hf.keys())[0]
data = np.array(hf[key])
hf.close()
image = cv2.cvtColor(np.uint16(data), cv2.COLOR_GRAY2RGB)
plt.axis('off')
plt.imshow(image)
plt.show()
我需要轉換為 RGB,然后在 object 檢測 model 中使用它們。 當我閱讀 H5 文件並查看圖像時,它們丟失了信息,並且 model 無法像使用原始 jpg 文件那樣執行檢測。
請有人可以幫助我了解如何在不丟失任何信息的情況下讀取 H5 文件?
如上所述,您的 HDF5 文件中缺少信息,因為用戶將圖像轉換為灰度(使用image.convert("L")
)。 執行此操作時,您的圖像會從 3 個通道變為 1 個通道。 下面的示例代碼演示了這一點。
image = Image.open(imageFilename)
print(image.size,image.mode)
image.show()
imageData = np.asarray(image)
print('Color image:',imageData.dtype, imageData.shape)
greyscaleImage = image.convert("L")
print(greyscaleImage.size,image.mode)
greyscaleImage.show()
imageData = np.asarray(greyscaleImage)
print('Grey scale image:',imageData.dtype, imageData.shape)
您的 object 檢測 model 需要彩色圖像還是可以將 1 通道(灰度)陣列轉換為 3 通道陣列? 如果您需要彩色圖像,我認為您會遇到問題-我認為您無法逆轉該過程。 您的用戶必須將圖像保存為 3 通道 RGB arrays。
如果只需要3通道陣列,可以展開1通道陣列,如下圖。
imageData3x = np.stack((imageData,imageData,imageData),axis=2)
print('3x Grey scale image:',imageData3x.dtype, imageData3x.shape)
plt.axis('off')
plt.imshow(imageData3x)
plt.show()
注意:上面的代碼不處理 HDF5 文件中的其他數據轉換(轉換為np.uint16
並將值乘以 8)。 我不清楚為什么要完成其中任何一個。 但是,只要您有一個標簽可以知道if convertTo16Bit
是True
還是False
,它們就可以很簡單地“撤消”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.