Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

画像処理

日本語文字入り画像を作成する

Pillow(PIL)はPythonの画像処理ライブラリで図形描画、画像読み出し・保存など可能です。また日本語の表示に対応しており(OpenCVは対応していない)画像に日本語文字を入れることができます。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python…

写真のexifから緯度・経度を取得して地図上にマークする

写真のexifから緯度・経度を取得する の続きで、写真のexifから取得した緯度・経度を地図上にマークします。モジュールfoliumを使用します。 その際、緯度・経度はそれぞれ小数点で与えるため、度分秒から換算します。 北緯(35度5分32.29秒)→35+5÷60+32.29÷3…

写真のexifから緯度・経度を取得する

写真のexif情報から撮影場所の緯度・経度を取得します 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 準備 スマホで撮影したこちらの写真を使います。撮影場所は静岡県熱海市の港です。 コード Pillowの_getexif() メソッドでexif情…

画像をグラデーションをつけて合成する

2枚の画像をグラデーションを付けて合成します。opencvのメソッドcv2.addWeightedを使います。片方の画像のウエイトを左→右で減らし、もう片方の画像のウエイトを逆に左→右で増やすことで左右にウエイトを変えて合成します。合成する画像は同じサイズでない…

形状の異なる数字画像を大量に生成する

機械学習を行うためには大量の学習データが必要になります。0-9の10個の数字画像を大量に生成します。以下のパラメータを変えた32x32pxの画像を4320個生成しpngファイルで保存します。 数字(0-9)・・・10 フォント・・・8 文字のx位置・・・3 文字のy位置・…

ヒストグラム平坦化・コントラスト制限付適応ヒストグラム平坦化によるカラー画像のコントラスト補正

明るい画像では明度の分布は明るい方に集中しており、暗い画像では明度は暗い方に集中しています。この明度の分布(ヒストグラム)を広げて明るさをまんべんなくする方法がヒストグラム平坦化で、画像のコントラスト調整ができます。 OpenCVではメソッドcv2.eq…

K-means(K平均法)で花の写真を色でクラスタリングする(全画素を特徴量に使う)

K-means(K平均法)で花の写真を色でクラスタリングする では画面全体のBGRの比率を特徴量として用いましたが、全画素のBGR値をそのまま特徴量に用いてクラスタリングをします。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 OpenCV …

K-means(K平均法)で花の写真を色でクラスタリングする

K-Meansクラスタリングは、与えられたデータを自動的に分類するアルゴリズムであるクラスタリングの一種で、クラスタの平均を用い、与えられたクラスタ数k個に分類する手法です。(Wikipedia >> k平均法) cv2.kmeans()を用いるとK-Meansクラスタリングが簡単…

ライブラリqrcodeでQRコードを生成する

ライブラリqrcodeを使うことでQRコード(2次元バーコード)がPythonで簡単に作成できます。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 qrcode 6.1 Pillow 5.2.0 準備 ライブラリqrcodeをAnaconda Promptよりインストールします。 …

ルックアップテーブルによる画像の減色

画素値0~255のそれぞれに対する係数をあらかじめ決めておき、画像を処理する手法があります。この係数のリストをルックアップテーブルと言い、ルックアップテーブルを用意することでOpenCVのcv2.LUT()メソッドにより画像処理が可能です。 元画像はBGRそれぞ…

特定チャンネルをガンマ補正し画像の色味を変える

画素値0~255のそれぞれに対する係数をあらかじめ決めておき、画像を処理する手法があります。この係数のリストをルックアップテーブルと言い、ルックアップテーブルを用意することでOpenCVのcv2.LUT()メソッドにより画像処理が可能です。 特定のチャンネル(…

K-Meansクラスタリングによる画像の減色

K-Meansクラスタリングは、与えられたデータを自動的に分類するアルゴリズムであるクラスタリングの一種で、クラスタの平均を用い、与えられたクラスタ数k個に分類する手法です。(Wikipedia >> k平均法) cv2.kmeans()を用いるとK-Meansクラスタリングが簡単…

画像をグニャグニャにする(各行をsinカーブでx方向にずらす)

画像をグニャグニャにします。画像を読み出し別のndarrayに1行ずつコピーしますが、その際にx方向にsinカーブでずらすことでグニャグニャに変形した画像を生成します。 関連記事 黒画像を作成する 画像を斜めに変形する 画像をザーザーにする(各行をランダム…

画像をザーザーにする(各行をランダムにx方向にずらす)

画像をザーザーにします。画像を読み出し別のndarrayに1行ずつコピーしますが、その際にx方向にランダムにずらすことでザーザーに変形した画像を生成します。 関連記事 黒画像を作成する 画像を斜めに変形する 環境 windows10 home Anaconda 3/ jupyter note…

波線を描く

波線を描きます。波線の絵を使いたくなることが結構ありますが、いざ描こうと思うと面倒です。なのでpythonで作成してみます。 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 OpenCV 4.0.0 コード import numpy as np import math i…

画像を斜めに変形する

画像を斜めに変形します。画像を読み出し別のndarrayに1行ずつコピーしますがその際にx方向に1pxずつずらすことで斜めに変形した画像を生成します。 関連記事 黒画像を作成する 環境 windows10 home Anaconda 3/ jupyter notebook 5.6.0 Python 3.7.0 OpenCV…

回転を考慮した外接矩形を描画する

Pythonの画像処理ライブラリOpenCVの領域検出機能を使って回転を考慮した外接矩形(長方形)を算出します。findContoursにより領域を検出しminAreaRectにより検出した領域に対する外接矩形を求めます。

特定の色を別の色に変換する(赤い服を緑の服に変える)

赤い服を着た人物写真の服の色を緑や青に変えます。Pythonの画像処理ライブラリOpenCVで画像をBGR色空間からHSV色空間に変換し、ライブラリnumpyのwhereメソッドにより色相Hが赤の範囲にある画素についてHをシフトさせることで赤を緑や青に変換します。

写真をミニチュア風に加工する

ミニチュア写真の特徴として、斜め上から撮影されている、コントラストが強い、上下がぼけている、があります。斜め上から撮影した写真をPythonの画像処理ライブラリOpenCVでコントラスト強調処理と上下のぼかし処理をすることでミニチュア風に加工できます。

ルックアップテーブルによる画像コントラストの補正

画素値0~255のそれぞれに対する係数をあらかじめ決めておき、画像を処理する手法があります。この係数のリストをルックアップテーブルと言い、ルックアップテーブルを用意することでOpenCVのcv2.LUT()メソッドにより画像処理が可能です。ガンマ補正とS字カ…

国旗判定器で国旗を判定してみる

国旗判定器を作る、で判定ファイル作成に用いた画像で判定がうまくいくことを確認しましたが、他の画像でうまく判定できるか試します。判定用リストファイル、判定コードはそのままです。 次の3つの画像で試します。 (1)いらすとやから入手したフランス国旗…

国旗判定器を作る

国旗の判別器を作ります。あらかじめいくつかの国旗画像についてBGR各チャンネルの輝度の比率を求めたデータ(判定用リスト)を作成しておいて、それと比較することでどこの国旗かを判別します。 判定用リストのBGR比率(添え字c)と判定したい画像のBGR比率(添…

鳥取砂丘に地上絵を描く

鳥取砂丘の空撮画像に猫の地上絵を書きます。猫のイラストからエッジ検出し、エッジをぼかして地上絵の画像を作成、鳥取砂丘の画像と合成します。 使った関数・メソッド cv2.imread() : 画像ファイルの読み出し cv2.Canny() : Canny法によるエッジ検出 cv2.c…

航空写真を加工し地形に穴が開いているように見せる

画像に穴が開いているような加工をします。単純に黒い円を重ねるだけだと自然に見えないので 白地に灰色塗りつぶした円を作成し255で規格化し画像に積算する 円の大きさを少し小さくして同様に積算する これを繰り返す という手順により中心部に行くほど黒く…

画像の一部分を拡大する

画像の一部分を拡大します。画像を縦に3つに分割し、真ん中を縦に1.5倍に拡大し、3つの画像を一つに連結することで画像の一部を拡大します。 使った関数・メソッド cv2.imread() : 画像ファイルの読み出し cv2.resize() : 画像サイズの変更 cv2.imwrite() : …

画像を点描画に変換する

画像を点描画に変換します。飛び飛びに円を描いて点描化します。円の色を設定するために、元画像の縮小画像を作りその配列から元画像の飛び飛びの色を取得します。 使った関数・メソッド cv2.imread() : 画像ファイルの読み出し ndarray.shape() : ndarrayの…

画像の彩度、明度を変える

Pythonの画像処理ライブラリOpenCVで読み込んだ画像をBGR色空間からHSV色空間に変換することで彩度(Saturation)、明度(Value)の調整が可能になります。この方法で画像の鮮やかさ、明るさを調整します。

フォルダ内の画像の幅をそろえる

フォルダ内にある全ての画像ファイルの幅を同じにします。 使った関数・メソッド os.listdir() : ディレクトリ内のファイルをリストに cv2.imread() : 画像ファイルの読み出し img.shape : 画像の高さ、幅、チャンネル数の取得 cv2.resize() : 画像サイズの…

画像の上下のみぼかす

写真の上下をぼかし、中央はそのまままにします。画像の上中下3つに分け、上下の画像をぼかし、最後に上中下を再度連結します。 使った関数・メソッド cv2.imread() : 画像ファイルの読み出し cv2.blur() : 画像の平均化 cv2.vconcat() : 画像を縦に連結 cv2…

画像をチャンネル別(青、緑、赤)に表示する

カラー画像を青、緑、赤各チャンネルの輝度に分けて表示します。 元画像と各チャンネルの画像を連結して一枚の画像にして保存します。 関連記事 航空写真の画素B(青)G(緑)R(赤)平均値を求め棒グラフにする 画像のヒストグラムを比較する 使った関数・メソッ…