#目標とモチベーション
大学で講義ノートをipadのノートアプリでとっている私のような者が最終的に行き着くのはこんなノートです
そう、黒板の写真を撮ってノートに貼っつけるわけです。
このやり方はとても楽な代わりに不恰好なノートになってしまいます…
そこでpythonistaでpython動かして黒板に書かれた文字だけ残した透過画像にしてやれば楽で、なおかつそこそこ綺麗なノートになるはず…と思ったのでやってみました。
#画像の処理
import photos
from PIL import Image
from PIL import ImageOps
今回はすべての処理をpythonistaで行いたかったのでpythonistaでも動く上記のモジュール等をimportします
img=photos.capture_image()
mono=img.convert("L")
mono=ImageOps.invert(mono)
photos.capture_image()でpythonistaからカメラを起動し黒板の写真を撮ります。
撮った写真はimgにPIL.Imageオブジェクトとして渡されます。
convert()では画像のモードを変更することができます。今回はグレースケールにしたかったので上記のようにしました。
次に、最終的に黒板の文字は黒にしたいのでネガポジ反転しておきます。
ここまでで以下のように画像が処理されてきました。
そしてここからバイナリ値で0と255の2値に落とし込みます
i =155
mono=mono.point(lambda x: 0 if x < i else x)
mono=mono.point(lambda x: 255 if x >= i else x)
元の画質のせいで若干潰れているところがありますが結構綺麗になりましたね。
さてここから白い部分を透けさせていきます
Image.putalpha()は与える引数によって透過率を設定することができます。
0を与えると100%透過、255を与えると0%透過(不透過)となります。
また、引数に透過させたい画像と同サイズで8bitグレースケールのImageオブジェクトを指定することもでき、この場合も透過率は先ほどと同様です。
今、先ほどの画像の白い部分を100%透過させたいので、これをネガポジ反転した画像を引数として与えます
temp=mono.copy()
temp=ImageOps.invert(temp)
mono.putalpha(temp)
mono.show()
最終的にこんな感じになりました
少しわかりにくいですがしっかり透けています
ノートに貼り付けてみましょう
いい感じです。これでノートを書くのに夢中になって話を聞けない!
なんてことは無くなります
なお有志の手によって2値に落とし込むときの基準値をuiで微調整して多種多様な教授の筆圧に対応できるようになった完成品がこちらに置いてあります
https://github.com/Keisuke168/auto_boading
#補足
私の場合はiPhoneのpythonistaにこのスクリプトを入れておき、ショートカットから動かしました。
import clipboardして一番最後に
clipboard.set_image(mono)
これをつけておけばクリップボードにコピーまでできるのであとはipad上でペーストするだけです