[解決済み】PythonでRGB画像をグレースケールに変換するにはどうすればいいですか?
2022-05-01 14:52:52
質問
を使おうとしています。
matplotlib
を使用して、RGB 画像を読み込んでグレースケールに変換しています。
matlabでは、こんな使い方をしています。
img = rgb2gray(imread('image.png'));
で matplotlibチュートリアル をカバーするものではありません。ただ、画像にあるように
import matplotlib.image as mpimg
img = mpimg.imread('image.png')
で、その配列をスライスしているのですが、私の理解ではRGBをグレースケールに変換するのとは違うようです。
lum_img = img[:,:,0]
numpyやmatplotlibにrgbからgrayに変換する組み込み関数がないのは信じがたいことだと思います。これは画像処理では一般的な操作ではないでしょうか?
を使って取り込んだ画像で動作する、とてもシンプルな関数を書いてみました。
imread
を5分で完了させました。恐ろしく非効率ですが、だからこそプロフェッショナルな実装が組み込まれていることを望んでいたのです。
Sebastianは私の機能を改善してくれましたが、私はまだビルトインのものを見つけたいと思っています。
matlabの(NTSC/PAL)実装です。
import numpy as np
def rgb2gray(rgb):
r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
解決方法は?
でやってみてはどうでしょうか? ピロー :
from PIL import Image
img = Image.open('image.png').convert('L')
img.save('greyscale.png')
入力画像にアルファ(透明)チャンネルがあり、それを保持する必要がある場合は、モード
LA
:
img = Image.open('image.png').convert('LA')
matplotlibと 数式
Y' = 0.2989 R + 0.5870 G + 0.1140 B
ができたんですね。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def rgb2gray(rgb):
return np.dot(rgb[...,:3], [0.2989, 0.5870, 0.1140])
img = mpimg.imread('image.png')
gray = rgb2gray(img)
plt.imshow(gray, cmap=plt.get_cmap('gray'), vmin=0, vmax=1)
plt.show()
関連
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
python string splicing.join()とsplitting.split()の説明
-
PicgoのイメージベッドツールをPythonで実装する
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] データ型が理解できない
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?