はじめに
前回、WebCameraの映像をAsciiアート風に変換するツールを作ってみたので
それと似た発想でセル上に並べられたCheckBoxに映像を出力してみる。
参考記事
プロジェクトの作成
大まかな手順としては大まかな手順としては上記の参考記事と全く同じ。
入力映像をグレースケール化し、
指定されたドットサイズでセルに分割して、
各セルを黒の比率によってCheckBoxの値となるBoolの配列を返す。
CheckBoxの値の設定
セル単位で黒の比率が0.4より大きければ、trueを返し、
それ以外は、falseを返す。
lib.rs
fn analyze_cell(cell: &[u8]) -> bool {
let black_pixels = cell.chunks(4)
.filter(|p| p[0] < 128 && p[1] < 128 && p[2] < 128 && p[3] > 0)
.count();
let total_pixels = cell.len() / 4;
let black_ratio = black_pixels as f32 / total_pixels as f32;
if black_ratio > 0.4 {
true
} else {
false
}
}
その他の処理は前回のソースと同じです。
とりあえず完成!
今回の成果物
デモURL
デモ動画
デモ画像
ソース
まとめ
今回は入力映像をCheckBoxの映像にしてみた。
もし、照明やカメラの環境で
CheckBoxの映像が潰れてしまう場合は
グレースケールの設定やセルの黒の比率を変更すると
よりメリハリがつくと思います。
※間違い等ありましたら、ご指摘いただけると助かります。