はじめに
skimage、scipy, numpy, matplotlibでムラ、かすれのある本物風印鑑画像を作成する方法について説明する。
解説
モジュールのインポートなど
バージョン
画像の読み込み
下記サイトから透過印鑑画像(PNG)を取得した。
印鑑の画像データを無料で配布|電子印鑑素材
高品質・背景透過の印鑑データが全て無料。PDF・PNG・SVGなど豊富な形式、認印など各種サイズに対応。
読み込んだ画像を表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_0-1.png)
画像のアルファチャンネル(透過度像)は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_1-1.jpg)
大きいムラの導入
0で構成された2次元データにランダムな位置に400の値を設定する。それにsigma=20のgaussian_filterをかけて、最大値が1より小さい画像を作成する。
作製した画像をinvertで反転して表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_2-1.jpg)
初期画像のアルファチャンネル(img[:,:,-1])と上画像を掛け合わせると以下の画像が生成できる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_3-1.jpg)
を元画像(RGB画像)と上のアルファチャンネル画像をdstackで結合させることで、ムラのある印鑑画像が生成できる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_4-1.jpg)
かすれの導入
先ほど作製したアルファチャンネル画像(img_mura[:,:,-1])をコピーして、この画像のランダムな位置を0とする。その画像は以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_5-1.jpg)
新しく作製したアルファチャンネル像を元画像(RGB画像)とdstackで結合させることで下の画像が生成できる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_6-1.jpg)
ぼかしの導入
skimage.filtersのgaussianフィルターをかけて印鑑画像をぼかす。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_7-2.jpg)
角度の調整
skimage.transformのrotateで印鑑の角度を調整する。mode=’edge’とすることで回転することでできた余白を画像のedgeの要素で埋める。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_8-1.jpg)
処理順にまとめて表示
処理順にまとめて表示すると以下のようになる。
![](https://sabopy.com/wp/wp-content/uploads/2021/11/hanko_matome-1.jpg)
本物風電子印鑑作成関数
処理順を関数化すると以下のようになる。元画像と同じ形式で保存するためにplt.imsave(""+x+".png",img_as_ubyte(r_img),dpi=600)
としている。
使用例
![](https://sabopy.com/wp/wp-content/uploads/2021/11/honmonohu_hanko1-1.png)
![](https://sabopy.com/wp/wp-content/uploads/2021/11/honmonohu_hanko2-1.png)
![](https://sabopy.com/wp/wp-content/uploads/2021/11/honmonohu_hanko3-1.png)
参考
印鑑の画像データを無料で配布|電子印鑑素材
高品質・背景透過の印鑑データが全て無料。PDF・PNG・SVGなど豊富な形式、認印など各種サイズに対応。
skimage.filters — skimage 0.24.0 documentation
skimage.util — skimage 0.24.0 documentation
skimage.transform — skimage 0.24.0 documentation
コメント