OpenCV - 在窗口中拖动图像块

时间:2013-03-24 19:56:49

标签: opencv

我正在尝试在OpenCV中制作拼图游戏。我正在做的是我正在将图像转换为小方块,这些小方块是相同尺寸的图像。例如,如果我有一个A x B尺寸的图像,那么我将其重新调整为640 x 640并将该重新调整大小的图像划分为每个尺寸为64 x 64的正方形。我将这些方形图像保存在本地磁盘上。

现在我想知道是否可以在一个窗口中随机放置这些方形图像并拖动这些图像以匹配最终获胜状态?我找不到实现拖放操作的方法。如果我能得到一些暗示,那就太好了。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

OpenCV无法在同一窗口显示多个图像(原生)。但是,您可以编写assembles all these little images into one large image的代码,然后在窗口中显示该代码。

这种方法的缺点是你必须存储一个数组,其中包含放置这些图像的位置信息(按地理位置),因此当用户点击屏幕中间时,您可以确切地知道哪个图像在那个位置。但是编写拖放动画也会有一些令人头疼的问题,因为OpenCV提供的功能无法做到这一点。

有一些演示展示了如何处理OpenCV上的鼠标点击:

底线, OpenCV不是为这些类型的用户互动而构建的。我建议您调查 Qt 或其他一些技术来构建您的游戏。

我记得看到一个能够实现您所需要的Qt演示: