Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
139
Help us understand the problem. What is going on with this article?
@Iroha_168

pythonで画像処理 〜黒板の写真を撮って文字以外を透過させた画像を作る〜

More than 1 year has passed since last update.

目標とモチベーション

大学で講義ノートをipadのノートアプリでとっている私のような者が最終的に行き着くのはこんなノートです
IMG_0812.PNG

そう、黒板の写真を撮ってノートに貼っつけるわけです。
このやり方はとても楽な代わりに不恰好なノートになってしまいます…
そこでpythonistaでpython動かして黒板に書かれた文字だけ残した透過画像にしてやれば楽で、なおかつそこそこ綺麗なノートになるはず…と思ったのでやってみました。

画像の処理

sample.py
import photos
from PIL import Image
from PIL import ImageOps

今回はすべての処理をpythonistaで行いたかったのでpythonistaでも動く上記のモジュール等をimportします

sample.py
img=photos.capture_image()
mono=img.convert("L")
mono=ImageOps.invert(mono)

photos.capture_image()でpythonistaからカメラを起動し黒板の写真を撮ります。
撮った写真はimgにPIL.Imageオブジェクトとして渡されます。

convert()では画像のモードを変更することができます。今回はグレースケールにしたかったので上記のようにしました。

次に、最終的に黒板の文字は黒にしたいのでネガポジ反転しておきます。
ここまでで以下のように画像が処理されてきました。

IMG_9C6D09310ECD-1.jpeg

image.png

image.png

そしてここからバイナリ値で0と255の2値に落とし込みます

sample.py
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.png
元の画質のせいで若干潰れているところがありますが結構綺麗になりましたね。

さてここから白い部分を透けさせていきます

Image.putalpha()は与える引数によって透過率を設定することができます。
0を与えると100%透過、255を与えると0%透過(不透過)となります。
また、引数に透過させたい画像と同サイズで8bitグレースケールのImageオブジェクトを指定することもでき、この場合も透過率は先ほどと同様です。

今、先ほどの画像の白い部分を100%透過させたいので、これをネガポジ反転した画像を引数として与えます

sample.py
temp=mono.copy()
temp=ImageOps.invert(temp)
mono.putalpha(temp)
mono.show()

最終的にこんな感じになりました
image.png
少しわかりにくいですがしっかり透けています
ノートに貼り付けてみましょう
IMG_93EF67348226-1.jpeg

いい感じです。これでノートを書くのに夢中になって話を聞けない!
なんてことは無くなりますね!決して楽をするために作ったわけではないので、、、!

なお有志の超絶有能マンによって2値に落とし込むときの基準値をuiで微調整して多種多様な教授の筆圧に対応できるようになった完成品がこちらに置いてあります
https://github.com/Keisuke168/auto_boading

補足

私の場合はiPhoneのpythonistaにこのスクリプトを入れておき、ショートカットから動かしました。
import clipboardして一番最後に

hosoku.py
clipboard.set_image(mono)

これをつけておけばクリップボードにコピーまでできるのであとはipad上でペーストするだけです

apple製品便利だなあああああ

139
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Iroha_168
工学部の大学生

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
139
Help us understand the problem. What is going on with this article?