島の海岸線の長さを推定してみる

この記事はOpenCV Advent Calendar 2015の23日目の記事です。

qiita.com

あらかじめ言います。しょぼいです。すみません!

目次

  • ネタ
  • 手法
    • 海領域の抽出
    • 輪郭抽出
    • 真ん中の輪郭のみを残す
    • 輪郭の長さを求める
    • 輪郭の長さをkmに変換する
  • 北海道の海岸線長
    • 敗因
  • 佐渡島の海岸線長
  • まとめ
    • 面積への展開
  • コード
続きを読む

オンメモリのFileStorage

この記事はOpenCV Advent Calendar 2015の11日目の記事です。

qiita.com

目次

  • 筆者の環境
  • やりたいこと
  • オンメモリの意義
  • リファレンス
  • ファイルの場合
    • ファイルからcv::Algorithmを読み込み
    • ファイルにcv::Algorithmを保存
  • オンメモリのFileStorage
    • メモリ領域にcv::Algorithmを書き込む
    • メモリ領域からcv::Algorithmを構築
    • cv::Algorithm::saveの秘密
    • saveとwriteの差
    • パクってリベンジ メモリ領域からcv::Algorithmを構築
    • もうちょっと良い方法
    • objnameなんて知らないよ
  • まとめ
  • 自作クラスのFileStorageへの対応
続きを読む

MatAllocatorとGC

この記事はOpenCV Advent Calendar 2015の9日目の記事です。初めてこういうのに参加します。

qiita.com

目次

  • 筆者の環境
  • ネタ概要
  • C++/CLIによるラッパークラス
  • メモリ不足になるシーン
  • メモリ使用量を見てみる
  • MatAllocatorを自作する
    • MatAllocatorについて
    • 自作してどうする?
    • 作ってみた
    • ManagedAllocatorをcv::Matに使わせる
    • 試す
  • おわりに
  • (参考)別の方法
続きを読む

GZip(Deflate)Streamで圧縮するときはCloseを忘れなく

狭いスコープでusingしておくのは大事だなと再認識。

書いたコード

byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe");

var memory = new System.IO.MemoryStream();
var gzip = new System.IO.Compression.GZipStream(
    memory, System.IO.Compression.CompressionMode.Compress);

gzip.Write(original, 0, original.Length);

byte[] deflated = memory.ToArray();
Console.WriteLine(deflated.Length); // 1712138

それらしい結果ですが、壊れています。

正しいコード

byte[] original = File.ReadAllBytes(@"C:\Windows\explorer.exe");

var memory = new System.IO.MemoryStream();
var gzip = new System.IO.Compression.GZipStream(
    memory, System.IO.Compression.CompressionMode.Compress);

gzip.Write(original, 0, original.Length);
gzip.Dispose(); // !!!

byte[] deflated = memory.ToArray();
Console.WriteLine(deflated.Length); // 1727359

Lengthが変わりました。なお環境はWindows10 x64です。

Dispose (Close)せずにFlushでも同じ効果かと思いましたが、変化は見られませんでした。