Loading [MathJax]/extensions/tex2jax.js

2017-07-25

C#:画像ファイルをいろいろ扱っていたらOutofMemoryエラー出る場合の対処法

100ページ超のマルチページTiffファイルを解析するプログラムを稼働させているとメモリ使用量がどんどん上がっていき、4つほどファイルを読んだらメモリオーバーで落ちてしまうという減少に随分前から悩まされてきました。その解決策がようやく判明。
GC.Collect();
GC.WaitForPendingFinalizers();  
GC.Collect();
というように、ガーベージコレクションを発動させるだけでなく、赤字の処理を追記したほうがいいらしいです。GC.Collect()で挟むと良いようです。いままでGC.Collect()しか記述してなかったです。ググると既知のTIPSのようですね。

プログラムでは、OpenCVSharpを使ったりしているので、そのあたりのバグかな~とか思ったりもしましたが違いましたね。おかげで、メモリ使用量が全く増えることなく稼働できています。

2017-07-18

Python:マルチページTIFFを読み込んで1ページずつ処理する


この記事は内容が古いので下記の最新記事を御覧ください。




(以下、旧記事)

PythonでマルチページTIFFを処理する方法。OpenCVでは未対応なようなので、PILを利用する。注意点は、
  • マルチページのページ数は n_frames で取得できる
というところ。ネットのサンプルはEOFエラーまでループを回すとか気持ち悪いことしてるので、n_frames +1 までループを回すのが美しいでしょう。

下記のコードを参照。
from PIL import Image
# Tiff画像を読み込む
image = Image.open('C:\\Users\\ochi\\temp\\sample2.tif')
#ページ数を求める
fLength =image.n_frames
#1ページずつ抜き出して処理
for i in range(0,fLength+1):
image.seek(1)
sImg =image.copy()
# 以下で何らかの処理