%%OpenCV 2.1からOpenCV 2.2に切り替えてみたら,エンターキーをcvWaitKeyで拾わなくなった気がするので,検証してみた.%%
OpenCV 2.3((厳密には[[リビジョン5523>https://code.ros.org/trac/opencv/changeset/5523]]))でbugfixされた
#contents
*前提 [#i29b885b]
-OpenCV 2.1 のビルドオプションはほぼデフォルト(( WITH_TBB だけ有効にしたけど,本件とは無関係だと思う))
-OpenCV 2.2 はWITH_QTでビルド.((こちらもWITH_TBBを有効にしたけど,多分無関係だと思う))
--Qtは4.7.0でビルド
*検証内容 [#ye36e340]
-OpenCVのcvWaitKey(C++インタフェースだとcv::waitKey)は押されたキーを拾って,int型のASCIIコードを返す.
-何も押されなかったら-1を返す.
-エンターキーは13に対応するのだが,Qtを有効にしたOpenCV 2.2でどう反応するか以下のコードでテスト
#geshi(c++, number){{
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
const char WINDOW_NAME[] = "OpenCV";
int main(int argc, char **argv){
cvNamedWindow(WINDOW_NAME);
int q;
while(q = cvWaitKey(0),q != 'q'){ // qが押されたら終了
std::cout << ' ' << q ;
}
cvDestroyWindow(WINDOW_NAME);
return 0;
}
}}
-これ以上ないほどシンプルなソースコード
-押されたキーのASCIIコードを返す
**検証結果(OpenCV 2.1) [#bcdc54cc]
-多数のキーの反応を返す
-ファンクションキー,矢印キー,InsertやHomeキーなどにも反応した.
-反応しなかったのはCtrl,Shift,Altなどの特殊キーばかり
**検証結果(OpenCV 2.2) [#a8600a93]
-Enterキーを押しても反応が無い
-Backspaceキーも反応が無い
-他のキーは反応がある
-2.1と比べて,以下のキーが確認できない
--Enter キー
--Backspace キー
--ファンクションキー
--Insert キー
--Page Up/Down キー
--End キー
--Home キー
--Delete キー
**検証結果(OpenCV 2.2 + CV_GUI_NORMAL) [#k03c6e6a]
-OpenCV 2.2には,Qtを有効にした場合,通常のウィンドウ(旧来のウィンドウ)を有効にするCV_GUI_NORMALというオプションが付く
-9行目を以下のように変更することで,従来のOpenCVのウィンドウを呼べる
#geshi(c++){{
-cvNamedWindow(WINDOW_NAME);
+cvNamedWindow(WINDOW_NAME,CV_WINDOW_AUTOSIZE|CV_WINDOW_KEEPRATIO|CV_GUI_NORMAL);
}}
-Qtのウィンドウの時と変わらず
-Qtのウィンドウを使う使わないに関わらず,ライブラリに問題があるっぽい.
**検証結果(OpenCV 2.2 C++インタフェース) [#ge96740e]
-上記のプログラムをC++インタフェースで書き換えてみた((もっとも,Cインタフェースの中身はほとんどがC++インタフェースのラッパーなので,当たり前と言えば当たり前((今回の関数たちを中までチェックしたわけではないが))))が,同様の結果に
*まとめ [#vd3464c7]
-鳴り物入りで登場したQtバックエンドであるが,まだまだBuggyな面があるっぽい.
-おそらく,原因はWITH_QTを有効にしてOpenCVをビルドしたこと.
-ソースコードを追えば原因があるかも知れないが,現状できる最短の%%解決策は''OpenCV 2.1を使え''ということか.orz....%%
--OpenCV 2.3で解決されたので,そちらを使うべし.もしくはOpenCV 2.2 でWITH_QTを無効にしてビルドする
-っていうか,2.1で意外にキーを拾えたんだな.ファンクションキーも使えたんだ,知らなかった.
*参考 [#p642ab49]
-[[OpenCVのバグ(trac)]]
ジャンル[[:OpenCV]][[:OpenCV 2.1]][[:OpenCV 2.2]][[:OpenCV 2.3]]