我正在尝试在 OpenCV 中制作拼图游戏。我正在做的是将图像转换为小方块,它们是相同尺寸的图像。例如,如果我有一个 A x B 大小的图像,那么我将其重新调整为 640 x 640 并将这个重新调整大小的图像划分为每个大小为 64 x 64 的正方形。我将这些方形图像保存在本地磁盘上。
现在我想知道是否可以将这些方形图像随机放置在一个窗口中并拖动这些图像以匹配最终的获胜状态?我找不到实现拖放的方法。如果我能得到一些提示,那就太好了。
我正在尝试在 OpenCV 中制作拼图游戏。我正在做的是将图像转换为小方块,它们是相同尺寸的图像。例如,如果我有一个 A x B 大小的图像,那么我将其重新调整为 640 x 640 并将这个重新调整大小的图像划分为每个大小为 64 x 64 的正方形。我将这些方形图像保存在本地磁盘上。
现在我想知道是否可以将这些方形图像随机放置在一个窗口中并拖动这些图像以匹配最终的获胜状态?我找不到实现拖放的方法。如果我能得到一些提示,那就太好了。
我懒得写你的程序,但这里有一些你可能喜欢的部分:
鼠标:
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;
OpenCV 不能在同一个窗口(本机)上显示多个图像。但是,您可以编写代码将所有这些小图像组合成一个大图像,然后将其显示在窗口上。
这种方法的缺点是您必须存储一个数组,其中包含这些图像放置位置的信息(从地理上讲),因此当用户单击屏幕中间时,您可以准确地知道哪个图像位于该位置。但是你也会在编写拖放动画时遇到一些头疼的问题,因为 OpenCV 提供的东西无法做到这一点。
有一些演示展示了如何处理 OpenCV 上的鼠标点击:
归根结底,OpenCV 不是为这些类型的用户交互而构建的。我建议您研究Qt或其他一些技术来构建您的游戏。
我记得看到一个 Qt 演示,它实现了你正在寻找的东西: