OpenCV

【OpenCV-Python】BGRA(32bit,8bitx4ch)のBitmapファイル読込

OpenCVで32bit(BGRA, 8bit4ch)のBitmapファイル(*.bmp)をimread()関数でファイルを開くと、OpenCVのバージョンに依存して、32bit(4ch) もしくは 24bit(3ch) で読込まれるようです。

結果からすると、Ver.4.5.4以前では 32bit(8bit4ch)、Ver.4.5.5以降では24bit(8bit3ch)で読込まれます。

評価環境

Python : Ver.3.8.10

OpenCV: Ver.4.4.0, 4.5.2, 4.5.3, 4.5.4, 4.5.5

 

評価コード

import sys
import numpy as np
import cv2

print(f"Python Ver.{sys.version}")
print(f"OpenCV Ver.{cv2.__version__}")

# 32bit(BGRA)の画像データ
img_32bit = np.ones((240, 320, 4), dtype = np.uint8) * 255
print(f"SRC:{img_32bit.shape}") # (240, 320, 4)

# 32bit画像データを各種ファイル形式で保存
cv2.imwrite("Image32.bmp", img_32bit) # 32bit保存
cv2.imwrite("Image32.png", img_32bit) # 32bit保存
cv2.imwrite("Image32.jpg", img_32bit) # 24bit保存
cv2.imwrite("Image32.tif", img_32bit) # 32bit保存

# 32bit画像ファイル読込
img_bmp = cv2.imread("Image32.bmp", cv2.IMREAD_UNCHANGED) 
img_png = cv2.imread("Image32.png", cv2.IMREAD_UNCHANGED) 
img_jpg = cv2.imread("Image32.jpg", cv2.IMREAD_UNCHANGED) 
img_tif = cv2.imread("Image32.tif", cv2.IMREAD_UNCHANGED)

print(f"BMP:{img_bmp.shape}") # OpenCV Ver.4.5.5以降(240, 320, 3)、OpenCV Ver.4.5.4以前(240, 320, 4)
print(f"PNG:{img_png.shape}") # (240, 320, 4)
print(f"JPG:{img_jpg.shape}") # (240, 320, 3)
print(f"TIF:{img_tif.shape}") # (240, 320, 4)

 

結果

32bit(8bit4ch)の画像データをimwrite()関数を用い bmp, png, jpg, tif 形式で保存すると、jpgファイルは24bitになるものの、他のファイルは、OpenCVのバージョンに関係なく、32bitで保存することができました。

OpenCV Python 32bit BGRA 8bit4ch bmp 保存

 

 

 

 

しかしながら、Bitmapファイル(*.bmp)ファイルの読込は、OpenCVのバージョンにより挙動が異なり、imread()関数に cv2.IMREAD_UNCHANGED を指定しても、OpenCV Ver.4.5.5以降では24bit(8bit3ch)、Ver.4.5.4以前では 32bit(8bit4ch) で読込まれていました。

コメント

タイトルとURLをコピーしました