はじめに
ここ最近はC/C++のOpenCVを用いて画像処理を行っているが、はまってしまったところがあったのでメモとしてここに残す。
今回はMat型の最大値や最小値、平均を求めるときにどうやって求めるかという所とその時に起こった問題について示す。
手法
最大値や最小値を求めるには早い話OpenCVにある関数を使えば簡単にコーディングできる。reduce関数というものでMat型の列または行ごとの平均や最大値、最小値を求めることができる。これを行、列に行うことによってMat型全体での値を求めることができる。
問題
実行速度に問題があった。自作のフィルタを作成していた時に発覚した。各要素にアクセスしその近傍で部分行列(5*5のフィルタを掛けるため)を作成しそこで最大値や最小値を求めていたのだが秒単位の実行速度になっていた。たかだか最大値を求めたりするのに時間がかかるのは正直画像処理や物体認識等をする上で厄介なものだと考えられる。
解決策
ポインタによる要素のアクセス
コードの可読性は落ちたが速度はおおよそ4倍となった。
終わりに
思い立って書いた記事であり実際のコードはまだ用意していない。準備出来次第追記を行っていく。