opencv 打开和保存.bmp文件会更改位深度

guykilcj  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(195)

我有一个test.bmp位图格式的文件。当查看它的属性时,文件的位深是32。这是正确的,因为文件格式应该是RGBA。
出于测试目的,我使用cv2打开此文件,然后保存它:

img_path = os.path.join(path_to_folder, "test.bmp")
img = np.array(cv2.imread(img_path, flags=cv2.IMREAD_UNCHANGED))

当我打印形状时,我 * 丢失 * 了alpha通道上的信息。

img.shape - (1200, 1920, 3)

我再次保存图像,看看位深度是否保持不变:

out_f_name = os.path.join(save_to_test, "test_save.bmp")
cv2.imwrite(out_f_name, img)

查看保存图像的位深度时,我得到24
这是一个问题,因为我需要32的输出深度供进一步使用。
我使用cv2的4.7.0版本

lb3vh1jj

lb3vh1jj1#

我已经试过你所描述的,但我无法重现你的错误,对我来说一切都很好。OpenCV正确加载了4个通道的原始BMP,当我写图像时,结果是32位深度。
下面是我代码:

import cv2 as cv
import numpy as np

img_path = "C:\\Users\\me\\Downloads\\snail4.bmp"
im = cv.imread(img_path, flags=cv.IMREAD_UNCHANGED)
print(im.shape)
(height, width, channels) = im.shape
cv.imshow('original', im)
for i in range(channels):
  s = im[:, :, i]
  cv.imshow(f'channel {i}',s)

cv.waitKey(0)
cv.destroyAllWindows()

cv.imwrite(img_path[:-4] + '_imwritten.bmp', im)

我有python 3.10.4,numpy==1.24.1和opencv-python==4.7.0.68
希望能有所帮助

相关问题