1年以上前のこのアプリ
.NET Frameworkだったので.NET Coreに移植(コピペ)して、ついでにいくつか変更した
画像を白黒2値画像に変換 1.2
右上のボタン
「画像貼り付け」クリップボードの画像を貼り付け
「2値化画像をコピー」変換した画像をクリップボードへコピー
ダウンロード先
ファイル名:20200324_画像を白黒2値に変換.zip
変換前後の見比べ
画像を左クリックしている間は元の画像を表示、クリックを離すと変換後を表示
処理速度アップ
3264x1836ピクセルの画像、これをしきい値0から255まで連続で変換処理する速度を以前のバージョンと比較してみると
39.79/14.93=2.6651038
2.5倍くらい速くなった、画像サイズが小さいと速度差はほとんど無くなるけど、フルHDより大きい画像なら効果があった
速度アップで大きいのはマルチスレッド対応、配列の値がしきい値より小さいかどうかで、0か255に変換するところを
//マルチスレッドで変換
Parallel.For(0, pixels.Length, i =>
{
if (pixels[i] < threshold) pixels[i] = 0;
else pixels[i] = 255;
});
普通のforをParallel.Forにしただけ。配列への同時アクセスでエラーになったりするのかと思ったけど、特に不具合はないみたい。同じ配列の同じIndexの値に同時アクセスだとエラーになるけど、同じ配列でも別のIndexの値にアクセスするのは問題ないってことかなあ
あとは少し余計な処理していたのを削除したのと.NET Frameworkから.NET Coreにしたことも速度アップになっているはず
さっきの画像を大津の2値化で変換、しきい値は87だった、これを1bppのpng画像で保存したのが
いいねえ
関連記事
次のvarは3週間後
次のWPF記事は2日後
前回のWPF記事は
2ヶ月前
.NET Coreのほうが気持ち速い