9

OpenCVは、Qtで使用されている場合、最近表示ウィンドウをアップグレードしました。見た目はとても良いですが、既存のQtGUIウィンドウに埋め込む可能性はありませんでした。唯一の可能性はまたはの作成であるように思われますが、cvNamedWindowそれcv::namedWindowは自由に動く独立したウィンドウを作成します。

既存のGUI内にそのOpenCVウィンドウを作成する可能性はありますか?私がOpenCVフォーラムで見つけたのは、私自身の質問にいくぶん似ている、未回答の質問だけです。

QtでOpenCV画像を表示する簡単な可能性がありますが、2つの大きな問題があります。

  1. 画像をピクセルごとにコピーする必要があり、非常に低速です。ピクセルごとに関数呼び出しがあります!(私のテストアプリケーションでは、画像からビデオを作成し、それをで表示するとcvNamedWindow、同時に複数のビデオでも非常にスムーズに実行されますが、IplImage-> QImage-> QPixmap->QLabelルートを通過すると、1本の動画でもかなりの遅れがあります)
  2. 私はそれでそれらの素晴らしい新しいコントロールを使うことができませんcvNamedWindow
4

3 に答える 3

9

まず第一に、画像変換はあなたが思っているほど非効率的ではありません。少なくとも私のコード(あなたが参照した質問への回答の1つ)のピクセルごとの「関数呼び出し」は、最適化されたコンパイルによってインライン化されます。

次に、highgui/imshowのコードも同じことをします。どちらの方法でも、マトリックスからARGB画像に到達する必要があります。QImage-> QPixmapの変換は、基本的にデータをメインメモリからGPUメモリに移動することに他なりません。これは、QPixmapデータに直接アクセスできず、QImageを経由する必要がある理由でもあります。

第3に、QGLWidgetを使用して画像を描画すると、数倍高速になります。OpenCVビルドでQT_OPENGLが有効になっていると思います。QPainterを使用してQGLWidget内にQPixmapを描画しますが、速度は問題ありません。コード例は次のとおりです。

http://sourceforge.net/p/gerbil/svn/19/tree/gerbil-gui/scaledview.h

http://sourceforge.net/p/gerbil/svn/19/tree/gerbil-gui/scaledview.cpp

ここで、元の質問に移ります。現在のオプションは、OpenCVからコードを取得し、別の名前空間でプロジェクトに含め、ニーズに合わせて変更することです。それを除けば、今のところ代替手段はありません。OpenCVのhighguiは、独自のイベントループ、Xサーバーへの接続などを使用しており、傍受できるものは何もありません。

于 2012-07-29T15:13:54.570 に答える
0

私の最初の推測はこれを言いたいことです:namedWindowのコードを掘り下げると、それらがウィンドウをペイントするために、頻繁には参照されないものの、ある種の標準オブジェクトを使用していることがわかると確信しています( openCVコード)。十分に野心的な場合は、このクラスを自分で拡張して、Qtのフレームまたはカスタムウィジェットに直接インターフェイスすることができます。Qtフレームの同様のメソッド、または(一般的な)ウィジェットクラスの拡張を使用して、ウィンドウ全体を取得して埋め込む方法もあるかもしれません。これは非常に興味深い質問であり、私が最近行っている仕事に直接関係しているので、私はそれについて考え、調査し続け、他にもっと役立つものを思い付くことができないかどうかを確認します。

[編集]あなたがとても興味を持っている特定の新しいコントロールは何ですか?私の最初の提案とは対照的に、プログラマーの側では、Qtコントロールを拡張してそれをエミュレートする方が効率的かもしれません。[/編集]

于 2012-07-29T15:11:50.470 に答える
-6

opencvhighguiの実装を確認してください。私が思い出すように、それはqtを使用します。

于 2012-07-29T14:54:20.007 に答える