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でも同じ効果かと思いましたが、変化は見られませんでした。

OpenCvSharpをつかう その24 (OpenCV 3.0のラベリング)

ラベリング3度目です。好きですね。露骨に作者の需要が現れています。

OpenCV3.0では、cv::connectedComponents という待望のラベリング(連結成分の抽出)関数が追加されました。

この関数を3.0.0.20150819版以降のラッパーでサポートしましたので、それを紹介します。

好みかもしれませんが、素のcv::connectedComponentsは、あまり使いやすい設計とは思えません。そこで、昔から添付しているOpenCvSharp.Blobに使い勝手を近づけたラッパーも作成しました。それも紹介します。

OpenCvSharpをつかう 記事一覧

続きを読む

OpenCvSharpをつかう その23 (OpenCV 3.0対応)

またまただいぶ間隔が空いてしまいすみません・・・

前回の記事(http://schima.hatenablog.com/entry/2014/09/08/220420)で罵詈雑言を浴びせたOpenCV3.0にOpenCvSharpをひとまず対応させました。

以下、簡潔に変更点・注意点を示していきます。

OpenCvSharpをつかう 記事一覧

続きを読む