Pythonでいろいろやってみる

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

OpenCV

ルックアップテーブルで画像の色味を調整する(B,G,Rチャンネルを個別に補正する)

ルックアップテーブルはあらかじめ用意された画素値に対応した変換表で画像の調整に用いられます。Pythonの画像処理ライブラリOpenCVのLUTによりB,G,R各チャンネル個別にルックアップテーブルでガンマ補正し画像の色味を変えます。

ルックアップテーブルで画像の彩度、明度を調整する(画像を明るく鮮やかにする)

ルックアップテーブルはあらかじめ用意された画素値に対応した変換表で画像の調整に用いられます。Pythonの画像処理ライブラリOpenCVのLUTにより彩度、明度チャンネル個別にルックアップテーブルでガンマ補正し画像の彩度、明度を変えます。

傾いた画像を自動で水平にする

Pythonの画像処理ライブラリOpenCVには領域検出機能(findContours)および回転外接矩形算出機能(minAreaRect)があります。お札が傾いて写った写真からこれらの機能で傾いている角度を算出、求めえた角度を利用し元画像を回転、お札を水平にします

四角形と三角形の中から三角形だけ抽出する(特定形状の抽出)

四角形と三角形が混在する画像から、三角形のみを抽出します。Pythonの画像処理ライブラリOpenCVの領域検出機能findContoursで図形の領域を抽出、近似図形算出機能approxPolyDPで求めた近似図形の頂点数から三角形かどうかを判断します。

複素関数を視覚化する

z=a+bi を用いた複素関数 f(z)において、実部 a、虚部 b に対して偏角 arg z および 絶対値 |r| が決まります。これら4つのパラメータを図示するために実部 a をx軸、虚部 b をy軸とした2次元グラフに、偏角 arg z を対応する色相でプロットする方法がありま…

ランダムウォーク

ランダムウォークは確率的な運動モデルの一種で、次にどちらに動くかを確率的に決めるため不規則な挙動を示します。 ここでは2次元のランダムウォークモデルとして、一ステップ毎に上下左右4方向に一定距離ランダムに移動する場合を考えます。ステップ数を10…

いろいろならせんを描く

(1) アルキメデスのらせん(等間隔)、(2) 放物らせん(外側に行くほど間隔が狭くなる)、(3) 双曲らせん(y=aを漸近線に持つらせん)、(4) リチュース(Θが大きくなるにつれ原点に近づくらせん)、(5) 対数らせん(等角螺旋)の5種類のらせんをPythonの画像処理ライブ…

ブラシ状の線を描く

Pythonの画像処理ライブラリOpenCVでブラシ状の線を描きます。ある座標から離れると密度が小さくなるよう点を描画することで濃淡をつけ、ブラシ状に見せます。乱数生成ライブラリrandomのgaussによりガウス分布を生成し点の座標を決めます。

リサージュ曲線を描く

リサージュ曲線は直行した2つの単振動の合成による平面図形で、 tを介した媒介表示変数表示では x = Acos(at) y = Bcos(bt+δ) となり、振幅の係数A,B、周波数の係数a,b、位相差δによりさまざまな図形が現れます。 Pythonの画像処理ライブラリOpenCVでリサー…

画像をマトリックス風に変換する

画像を映画マトリックスのような緑色の反転したカタカナで置き換えます。画像をPythonの画像処理ライブラリOpenCVのエッジ検出機能Cannyでエッジ検出し、エッジ部分を反転した緑色のカタカナで置き換えます。

まちまちなサイズの複数の画像をきれいに並べて一枚の画像にまとめる

サイズの異なる複数の画像を一枚の画像にきれいにまとめられると便利です。フォルダ内の画像ファイルをすべて読み出しPythonの画像処理ライブラリOpenCVにより2枚ずつ画像の高さをそろえて横に並べ、すべての画像を一枚の画像に整理します。

風景写真をクッキリさせる(空を青く、緑を鮮やかに)

ガンマ補正は画像の特定チャンネルの強調などに使われる非線形補正です。Pythonの画像処理ライブラリOpenCVで青空と草むらの写った写真のすべての画素値に対してガンマ補正し青空と草むらを鮮やかにします。

画像を描画しMP4動画を作成する

OpenCVのcv2.VideoWriterメソッドを使うと複数の画像ファイルから動画を作成することができます。ここではpillowで画像を描画・保存し、OpenCVで動画化しています。 関連記事 画像を描画しアニメーションGIFを作成する 環境 windows10 home Anaconda 3/ jupy…

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

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クラスタリングが簡単…

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

画素値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)いらすとやから入手したフランス国旗…