今日はプログラムのデバッグで1日潰れた.複数人で画像処理をしているのだが,一人を除いてうまく行かない.そんなに複雑なことをしてないのにだ.いろいろ調べているうちにうまく行っている一人だけがOpenCV1.0を使っていることが分かった.残りの人はOpenCV2.4.9だ.未だにOpenCV1.0を使っているということ自体に驚いたが,うまく動くかどうかはOpenCVのバージョンの差だということが分かった.そして,それぞれのバージョンの使っている関数の挙動をひとつひとつ比較するという地味な作業の末,原因が分かった.画像のサイズを変える関数resize(OpenCV1.0ではcvResize)が違うのだ.OpenCV2.4.9でresizeして画像を縮小すると高周波成分がよく残り,尖鋭な画像になる.対してOpenCV1.0だと高周波成分が消えてぼけたような画像になる.両方とも補間の指定はINTER_AREAだ.我々の行っていた画像処理では高周波成分が消えてくれた方が好ましかったので,OpenCV1.0の場合だけうまく動いていたのだった.それにしても,resizeなんて良く使う関数の挙動がバージョン違いでここまで違うとは驚いた.我々以外にもこれまで困った人がいたのではないかな.