投稿

12月, 2019の投稿を表示しています

RGB画像のチャンネル分割 cv2.split()

イメージ
今回はカラー画像をRGB(Red、Green、Blue)の3チャンネルに分割する手法を紹介します。 開発環境はjupyter notebook、言語はpython3系です。 今回使用した画像・コード一式は google drive に保存しておりますので、必要に応じてお使いください。 作成したコード import cv2 import glob import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import ImageGrid import numpy as np %matplotlib inline filename = glob.glob("img/pure_color.PNG") for files in filename: img = cv2.imread(files) Blue,Green,Red = cv2.split(img) cv2.imwrite("img/Blue.png",Blue) cv2.imwrite("img/Green.png",Green) cv2.imwrite("img/Red.png",Red) このコードを実行することで、トップ画像のように、画像を赤、青、緑の3つのチャンネルに分割することができます。 処理の解説 概要 今回のポイントは、 Blue,Green,Red = cv2.split(img) です。 この処理では、cv2.split()の括弧内にカラー画像を読み込んだ結果であるimgを代入しています。 これによって引数として画像のR, G, Bの3つの数値が出てくるので、変数Blue, Green, Redに格納しています。 ここで注意したいのは変数の順番をRGBではなくBGRにすることと、imgにはカラー画像を用いるということです。 cv2.cvtColor()等でグレースケールにした画像をcv2.split()に入れると、画像のチャンネル数が1チャンネルしかないため、エラーになります。 RGBへの分割とは チャンネル分割の処理の基礎知識について紹介します。 デジタル画像

グレースケール化 cvtColor()

イメージ
pythonで画像をグレースケール化する方法を紹介します。 今回使用した画像・コード一式は google drive に保存しておりますので必要に応じてお使いください。 作成したコード import cv2 import glob import matplotlib.pyplot as plt %matplotlib inline #画像の読み込み・表示 filename = glob.glob("curry*") img = cv2.imread(filename[0]) img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img2) #グレースケール化 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imwrite("grayscale.bmp",img) plt.imshow(img) plt.gray() コマンド実施例 コマンド実施前後で画像を比較しました。 元の画像のカレーは美味しそうですが、グレーにすると何とも言えないですね。 cv2.cvtColor()の使用方法 cv2.cvtColorは画像の色空間※を変換するコマンドです。 色を変換するということでconvert colorの略になっていますね。 一応記しておきますが、RGB, HSV, HLS, Lab, Luv, Gray (,Bayer)に変換できるそうです。 私自身RGBとGray以外使ったことないのですが、データによってということがあるのでしょうか・・・ ※色空間とは 座標で表されるような色の空間を指します。 例えばRGBの場合だと、赤緑青の三次元の空間で色が表されています。 実用例に基づくコマンド解説 今回の例では下記のコマンドを使用しています。 img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.cvtColor()内を見ていただくと、いずれもimg, cv2.COLOR_○○2△△となっています。 これはimgに対して、〇〇の色空間か

opencvで利用可能な拡張子について

イメージ
画像処理の定番モジュールであるopencvで使用できる拡張子とその特徴をまとめました。 圧縮性 拡張子 特徴 可逆 bmp 特になし dib pbm 2値(白or黒)のテキスト形式 pgm グレースケールのテキスト形式 ppm フルカラーのテキスト形式 pnm 2次元ラスタ画像形式 sr 不明。ご存じの方はご連絡ください。 ras UNIXで使われるラスタ画像形式 png 透明色の指定が可能。 tiff 1つのファイルの中に複数の画像を格納可能 tif 可逆/不可逆 jp2 jpgの後継。可逆・不可逆圧縮を選択可能 不可逆 jpeg ファイル容量が軽い 保存の度に画質が低下する jpg jpe この中で定番と言えば、.bmp、.png、.jpgぐらいでしょうか。 imageJと呼ばれる画像処理ソフトを使用するときは、よくtif画像からstack画像を作成していました。 stack画像というのは、下図のように画像を複数枚積み重ねたものをイメージしていただくと分かりやすいです。 MRIのように物体を輪切りにしたような画像を上から順にstack画像にすると、3次元的の物体として画像を取り扱うことができます。 以上で終わります。 質問があればコメントしてください。 記事の改善に努めます。

globを使った複数画像の読み込み

イメージ
前回記事 では単一の画像を表示する方法を3種類紹介しました。 今回はその発展で複数の画像、例えばフォルダ内保存している数枚の画像を一度に取り扱う方法を紹介します。 連番画像を読み込む手法とglobを用いる手法を記しています。 開発環境はjupyter notebook、言語はpythonです。 本プログラムは google drive にも保存しておりますので、必要に応じてお使いください。 今回作成したコード #1:モジュールのインポート import glob import matplotlib.pyplot as plt import cv2 from mpl_toolkits.axes_grid1 import ImageGrid %matplotlib inline #2:連番画像の読み込み fig = plt.figure(1, (12., 12.)) grid = ImageGrid(fig, 111, nrows_ncols=(1,2), axes_pad=0.1) for i in range(0,2): img = cv2.imread("ramen"+str(i)+".jpg") img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) grid[i].imshow(img) plt.imshow(img) #3:globによる読み込み fig = plt.figure(1, (12., 12.)) grid = ImageGrid(fig, 111, nrows_ncols=(1,2), axes_pad=0.1) files = glob.glob("*.jpg") for n in range(len(files)): img = cv2.imread(files[n]) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) grid[n].imshow(img) plt.imshow(img) なお本プログ

単一画像の表示 display(), cv2.imshow(), plt.imshow()

イメージ
python で画像を表示する方法を紹介します。 開発環境は jupyter notebook、 言語は python です。 まず下記サイトでjupyter notebookをインストールし、各モジュールをインストールしてください。 https://jupyter.org/ 今回の画像・コード一式は google drive にも保存しておりますので、必要に応じてお使いください。 今回作成したコード #1:モジュールのインポート import cv2 from IPython.display import Image, display import matplotlib.pyplot as plt %matplotlib inline #2:displayによる表示 img1_path = "cutlet.jpg" display(Image(img1_path)) #3:opencvによる表示 img1 = cv2.imread(img1_path) cv2.imshow('image.jpg',img1) cv2.waitKey(0) cv2.destroyAllWindows() #4:matplotlibによる表示 img_r = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB) fig = plt.figure(1, (12., 12.)) plt.imshow(img_r) 処理の解説 2.displayによる表示 img1_path = "cutlet.jpg" display(Image(img1_path)) img1_pathというのは表示したい画像のディレクトリ(保存場所)を示しています。 今回は上記のソースコードの保存ディレクトリと同じフォルダに保存している、cutlet.jpgという画像を相対パスで読み込んでいます。 ちなみにcutlet.jpgはこんな画像です。 cutlet.jpg ここで引用符""をつけなければ、cutlet.jpgが変数として扱われてしまうので、文字列として認識されるよう、"cutlet.jpg"という形で記述しています。 また引