2021.01.14 の日記:プログラミングの話 続

C++ では,数値計算,画像処理,3DCG をよく扱う.要するに貝の形と模様に関連することをやっている.

数値計算は特別なライブラリーは使わずに計算式をコツコツと書いて計算させている.

画像処理は OpenCV という有名なライブラリーを使っている.画像や動画の読み込み,書き出し,加工などが簡単にできる.初めて使ったのはたしか学部3年から4年に上がるくらいのタイミングだったと思う.何とは言わないが,透かすために頑張って習得した.当時作った100段階の透け透け画像はパソコンの奥に眠っている.あとは顔認識などもできるので,Web カメラで撮っている映像をリアルタイムで解析して,自分の顔を何とは言わないが他の画像に置き換えたりできる.

3DCG は freeglut というものを使っている.これはデフォルトでパソコンで使われている OpenGL というライブラリを使いやすく補助するものである.これを使うことで簡単に 3D の物体を表示・回転させたり,マウスでグリグリすることができる.工夫すれば obj ファイルを読み込んでテクスチャ込みで表示したり,OpenCV と組み合わせて動画として保存したりもできる.基本的なことは下のサイトが詳しい.僕も最初をここを参考にして勉強した.

tokoik.github.io

===

今回は C++ を使ってスクショの自動化をした.Windows では「Win」+「PrtScr」でスクリーンショットを自動で名前を付けて保存できる.また,Kindle のリーダーでは下矢印キーで次のページに送ることができる.つまりキー操作だけで全ページのスクショが撮れる.キーの入力には,「キーが押された」という情報と「キーが離された」という情報が必要である.キーを実際に押して離すことなく,それらの情報を PC に伝えることができれば人間が操作することなくスクショが撮れることになる.調べると,どうも SendInput() という関数を使うことで,どのキーがどの状態になったかを仮想的に入力できるらしい.この関数を使って,

(「Win」押す→「PrtScr」押す→「Win」離す→「PrtScr」離す→「↓」押す→「↓」離す)→(・・・)→・・・

という処理をひたすら行えば,全ページのスクショが撮れそうである.あとは,キー入力から Kindle ソフトの応答までのラグを考えて,各処理の間にプログラムを数百ミリ秒待機させる処理を入れればいけそうである.これは Sleep() 関数を使えばよい.撮ったスクショは画面全体のスクショだから,本のページだけを改めて保存するために OpenCV を使ってスクショ画像を読み込んでトリミングすれば漫画がページごとに画像として保存される.PDF 化は難しそうなので今回はパス.


それでは,自動化した操作の様子がこちらです!

とか動画で見せたいんですけど,順当に著作権法に引っかかるのでダメです.モザイクかけたらよくわからないしなぁ.そもそもスクショの様子をキャプチャで動画にするの無理なのでは?ただ,次々にスクショを撮っていく様子はシュールでめちゃくちゃ面白い.コード間違えると悲惨なことになりかねないからわりと怖かったかったけど,上手くいって良かった.Sleep() の待機時間の設定とか間違えて一瞬でドライブの容量いっぱいにならなくて良かった.

いずれ画像処理と合わせてマインスイーパーの自動化とかやりたい.

===

スクリーンショットが自動化できたよ 恥ずかしいからコードは載せない

チャットモンチーの曲の歌詞です.