前回はOpenCV2.4を使ったOpenCV-Match UDFを使いました。2020年1月現在のOpenCVは4.2です。これを使いたいのですがC のインターフェースはOpenCV3とかでなくなったので、DllCall()が使えません。簡単に実現するにはPythonに移行するところなのですが、AutoItの記事書いているので・・・下記を大変参考にさせていただき、Match UDFとの速度差も見てみました。
1. 結果だけでなく過程も見てくださいブログの記事を参考にする
「結果だけでなく過程も見てくださいブログ」の記事が凄いです。というわけでこちらを参考にすればOKです。
Visual Studio2019, OpenCV4.2は上記ブログでのVisual Studio2017, OpenCV3.4とほぼ同じ構成なので行けます。
1.1 OpenCV4.xビルドについてはこちらが参考に

2. OpenCV Match UDF(2.4)とOpenCV4.2(dll内マッチ)の速度
当然ですがOpenCV4.2のwrapper dllの圧勝でした。
OpenCLにチェックしてビルドしているからなのでしょうかね?
Core i5 7500HQ Intel HD 650, GTX1050 ノートPCで実行すると微妙にGPU使用率上がるので使われているのかな?(Cmake時CUDAはチェック外しています)
Match UDFが1,000msecに対してOpenCV4.2ラッパーdllだと230msecほど。CPUのクロックがバラバラなので何とも言えませんが、画面内画像マッチに限って言うと一度作ればその関数使うだけなので高速なほうを使いたいですね。
あと、作成したthreshold=0.981fなのでMatch UDFのほうも同様に0.981にすると、背景が薄いグレーになるとマッチングしません。
下記の画像でOpenCV4.2は認識。MatchUDF(2.4)は駄目でした。Thresholdの扱いかと。


3. matchTemplate()をググってパラメータ調整
matchTemplate thresholdあたりでググってパラメータを見てみたりして、引数変更したりしましょう。

4. pythonのようなwrapper生成機能があれば・・・
OpenCVのソースにはPythonで使えるWrapper生成機能が入っているんですよね。
ここまで来ると他のOpenCV関数使うようなことがあるならPythonのほうが良いですね・・・
コメント