9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python+OpenCVで透過画像作る

Last updated at Posted at 2019-10-30

はじめに

透過画像作りたいのですが、調べたら意外となかったので自分のために備忘録

環境

  • MacBookPro

  • Python (3.7.4)

python --version
Python 3.7.4
  • OpenCV (4.1.1)
>>> import cv2
>>> cv2.__version__
'4.1.1'

プログラム


#!/usr/bin/python
import numpy as np
import cv2

image_file = 'sample.png'
image = cv2.imread(image_file, -1)

width = image.shape[0]
height = image.shape[1]
out = np.zeros(image.shape[:4], np.uint8)

for i in range(width):
	for j in range(height):
		b = image[i][j][0]
		r = image[i][j][1]
		g = image[i][j][2]
		a = image[i][j][3]
		if r>0 or g>0 or b>0:
			out[i][j][0] = 255
			out[i][j][1] = 255
			out[i][j][2] = 255
			out[i][j][3] = 255
		else:
			out[i][j][0] = b
			out[i][j][1] = r
			out[i][j][2] = g
			out[i][j][3] = 0

cv2.imwrite("alpha.png", out)

簡単な解説

前提

そもそもalphaチャネルは、pngじゃないともっていないので、jpgとかだとダメです。なので、まずは、pngファイルを準備します。

画像読み込み

image_file = 'sample.png'
image = cv2.imread(image_file, -1)

画像を読み込む時の引数で -1 をつけるとalphaチャネルまで読み込めます。

出力画像の箱準備

out = np.zeros(image.shape[:4], np.uint8)

0で埋めたnparrayを準備してます。

透過処理

for i in range(width):
	for j in range(height):
		b = image[i][j][0]
		r = image[i][j][1]
		g = image[i][j][2]
		a = image[i][j][3]
		if b>0 or r>0 or g>0:
			out[i][j][0] = 255
			out[i][j][1] = 255
			out[i][j][2] = 255
			out[i][j][3] = 255
		else:
			out[i][j][0] = b
			out[i][j][1] = r
			out[i][j][2] = g
			out[i][j][3] = 0

1ピクセルづつ処理してます。
この処理だと、黒(0,0,0)を透過させてます。そして、黒じゃないところを白(255,255,255)にします。
なので、黒じゃない時(b>0 or r>0 or g>0)はそのまま、それ以外の時は、alphaを0にしてます。

結果

処理前
decode.png

↓↓↓↓↓↓↓↓↓
処理後
out.png
※透過+白だから見えないぽいので、クリックしていただけると幸いです。

たまに、透過画像が必要になる人は参考にしていただければと思います。

ありがとうございました。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?