1

OpenCVでジグソーパズルゲームを作ろうとしています。私がしているのは、画像を同じ寸法の画像である小さな正方形に変換しているということです。たとえば、A x Bサイズの画像がある場合は、サイズを640 x 640に変更し、このサイズ変更された画像をそれぞれ64x64サイズの正方形に分割します。これらの正方形の画像をローカルディスクに保存します。

これらの正方形の画像を1つのウィンドウにランダムに配置し、これらの画像をドラッグして最終的な勝者の状態に一致させることが可能かどうかを知りたいですか?ドラッグアンドドロップを実装する方法が見つかりません。これについていくつかのヒントを得ることができれば素晴らしいでしょう。

4

2 に答える 2

1

私はあなたのプログラムを書くのが面倒ですが、ここにあなたが好きかもしれないいくつかの部分があります:

ハツカネズミ:

void onmouse(int event, int x, int y, int mousestate, void *userptr)
{
    if (event==1) // lmousebuttondown, do something with x, y
}

namedWindow("win");
setMouseCallback( "win", onmouse );

そして、小さな画像(ドラッグしたもの)を大きな画像にペイントします。

Rect r(x,y,small.cols, small.rows);
big(r) = small;
于 2013-03-24T20:08:30.537 に答える
1

OpenCVは、同じウィンドウに複数の画像を(ネイティブに)表示することはできません。ただし、これらすべての小さな画像を1つの大きな画像にアセンブルするコードを記述して、それをウィンドウに表示することはできます。

このアプローチの欠点は、それらの画像が配置されている場所(地理的に言えば)の情報を含む配列を格納する必要があるため、ユーザーが画面の中央をクリックすると、どの画像がその位置にあるかを正確に知ることができることです。ただし、OpenCVが提供するものではそれを行う方法がないため、ドラッグアンドドロップアニメーションを作成する際の大きな頭痛の種もあります。

OpenCVでのマウスクリックに対処する方法を示すいくつかのデモがあります。

結論として、OpenCVはこれらのタイプのユーザーインタラクション用に構築されていませんQtまたはその他のテクノロジーを調査して、ゲームを構築することをお勧めします。

私はあなたが探しているものを達成するQtデモを見たのを覚えています:

于 2013-03-24T20:46:27.053 に答える