JupyterとPythonを使用した画像処理の自動化

Python用のオープンソースライブラリを使用して画像処理を行う方法を知っている場合は、グラフィックエディタでの画像処理を扱いたくないでしょう。







最近、私の子供は彼の好きな漫画からキャラクターのカラーリングを作りたいと思っていました。明らかな解決策は、Linux用のある種のグラフィカルエディタを使用することでしたが(私はLinuxユーザーであるため)、私は怠惰な人間であることを思い出しました。



幸い、私はPythonとJupyterLabに精通しています。 Jupyterがどのようにタスクを簡単にするかを見てみましょう。



まず第一に、もちろん最新バージョンのPythonが必要です(macOSユーザーの場合は、このチュートリアルに従うことができます)。次に、JupyterLabPillow(Python Imaging Library(PIL)のフォーク)をインストールして開く必要があります



$ python -V

Python 3.8.5

$ pip install jupyterlab pillow

……………………..

$ jupyter lab


この場合、鹿をイメージして描きたいと思います。まず、画像をダウンロードしてローカルに保存しましょう。著作権に煩わされないようにCreativeCommonsまたはその他のオープンソースライセンスの画像を使用することをお勧めします。この例では、Unsplashのオープンソースイメージを使用して、deer.jpgという名前を付けました。



インポートすることから始めましょう:



from PIL import Image


画像を開いてサイズを確認しましょう。



pic = Image.open("deer.jpg")
pic.size
(3561, 5342)


これはおそらく私たちの仕事には少し多すぎます。これらの高解像度の画像は、ページを着色するのではなく、本に適しています。画像サイズを小さくする:



x, y = pic.size

x //= 10

y //= 10

smaller = pic.resize((x, y))


サイズは10分の1になりました。



smaller






完璧に。先に進みます。



この鹿は、境界検出アルゴリズムの餌食になりやすいはずです。着色を容易にするために、画像をクリーンアップする必要があります。そして、幸いなことに、これにも既成のアルゴリズムがあります。



from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)

edges






これはおそらく最も重要なステップです。余分な詳細はすべて削除し、明確な線を残します。色は少し変ですが、この問題を解決するのは難しくありません。画像をカラーストライプに分割し、最も鮮明な線のあるものを選択します。




bands = edges.split()
bands[0]






これで線ははっきりしましたが、パレット自体はまだ印刷に適していません。これは、プリンターのインクが不足し、子供が黒い背景に絵を描くことを好まないためです。そこで、色を反転させます。xのしきい値をmax-blackとmax-whiteに設定して、線をさらに明確にします。




outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline






ここで、画像に多くの空きスペースが残っていることに注意してみましょう。それでは、トリミングしてみましょう。



outline.crop((10, 200, 300, 400))






まあ、それだけです。写真をPDF形式(印刷用)で保存しましょう:



outline.save("deer.pdf")


これはあなたがあなたの子供のためにあなた自身の着色ページを簡単に作ることができる方法です:最小のルーチン、最大のプログラミング!






広告



Epicサーバー、強力なAMDEPYCプロセッサと非常に高速なIntelNVMeドライブを備えたLinuxまたはWindowsVPSです。ホットケーキのように分散!






All Articles