opencvで透過pngが変な画像になる
opencvで処理したpng画像を再度imwriteで保存するとおかしな模様が出ている場合があった 例えば単純に以下のようにした場合
image = cv2.imread(image_path) imwrite('/tmp/image.png', image)
調べてみると原因はalphaチャネルが0のpixelでもRGBの値は入っていたため。
(上記のコードでimreadするとalphaチャネルは無視されてRGBの値のみがロードされるため)
alphaチャネル付きの状態で画像を処理したい場合は単にimreadでオプションを渡せばOK
image = cv2.imread(image_path, -1) imwrite('/tmp/image.png', image)
これでalpha付きでロードして保存されるので元の画像と同じ状態となる
透過している部分は黒く塗りつぶしてRGBで保存したい場合はこんな感じで
image = cv2.imread(image_path, -1) if image.shape[2] == 4: image[image[:,:,3] == 0] = 0 imwrite('/tmp/image.png', image)