80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也可以算得上是最早的“手游”了吧……

今天我们用OpenCV来复现一下儿时的经典!

代码:


#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
#include <time.h>using namespace cv;Mat Sourceimage, Spilteimage, Rebuildimage, Dstimage;
int rows, cols;
int Roirows, Roicols;
vector<Mat>arraryimage;
void Randarrary(vector<Mat> &vectorMat);    //随机排列子图像序列函数
static int vectornumber = 0;
void OnMouseAction(int event, int x, int y, int flags, void *ustc);  //鼠标回调事件函数int mainFun()
{Sourceimage = imread("D:\\test\\lena.jpg");imshow("Source image", Sourceimage);rows = 6;  //将图像分割成rows行cols = 4;  //将图像分割成cols列Roirows = Sourceimage.rows / rows;Roicols = Sourceimage.cols / cols;Spilteimage = Mat::zeros(Sourceimage.rows, Sourceimage.cols, Sourceimage.type());Dstimage = Mat::zeros(Sourceimage.rows, Sourceimage.cols, Sourceimage.type());for (int i = 0; i<rows; i++){for (int j = 0; j<cols; j++){Mat SourceRoi = Sourceimage(Rect(j*Roicols, i*Roirows, Roicols - 1, Roirows - 1));arraryimage.push_back(SourceRoi);}}// 随机函数Randarrary(arraryimage);for (int i = 0; i<rows; i++){for (int j = 0; j<cols; j++){Mat SpilterRoi = Spilteimage(Rect(j*Roicols, i*Roirows, Roicols - 1, Roirows - 1));addWeighted(SpilterRoi, 0, arraryimage[vectornumber], 1, 0, SpilterRoi);vectornumber++;imshow("Splite image", Spilteimage);waitKey(150);}}setMouseCallback("Splite image", OnMouseAction);waitKey();return 0;}//*******************************************************************//
//随机调换所有的子图像序列的位置,用于在 Splite image中显示
//*******************************************************************//
void Randarrary(vector<Mat>& vectorMat)
{for (int i = 0; i<vectorMat.size(); i++){srand(int(time(0)));int a = rand() % (vectorMat.size() - i) + i;swap(vectorMat[i], vectorMat[a]);}}//*******************************************************************//
//鼠标回调函数,用于获取需要查找的子图像在原图像中的位置,并在叠加显示在目标图像中
//*******************************************************************//
void OnMouseAction(int event, int x, int y, int flags, void *ustc)
{if (event == CV_EVENT_LBUTTONDOWN){Mat RoiSpilte, RoiSource;int rows = (y / Roirows)*Roirows;int clos = (x / Roicols)*Roicols;RoiSpilte = Spilteimage(Rect(clos, rows, Roicols, Roirows));imshow("Slice", RoiSpilte);Mat image = Mat::zeros(Sourceimage.rows - Roirows, Sourceimage.cols - Roicols, CV_32FC1);matchTemplate(Sourceimage, RoiSpilte, image, 1);normalize(image, image, 0, 1, NORM_MINMAX);double minV = 0;double maxV = 0;Point minP, maxP;minMaxLoc(image, &minV, &maxV, &minP, &maxP);Mat ROIDst = Dstimage(Rect(minP.x, minP.y, Roicols, Roirows));addWeighted(ROIDst, 0, RoiSpilte, 1, 0, ROIDst, -1);imshow("Jigsaw image", Dstimage);}
}//-----开始------
void COpenCVLearningDlg::OnBnClickedStartButton()
{mainFun();
}

效果:

欢迎扫码关注我的微信公众号

原文地址:https://blog.csdn.net/dcrmg/article/details/52069043

OpenCV-19拼图板小游戏相关推荐

  1. 【笔记】Opencv 实现拼图板小游戏

    for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){Mat SourceRoi=Sourceimage(Rect(j*Roicols,i*Roi ...

  2. 90年代经典“手游”—拼图板小游戏Opencv实现

    80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也 ...

  3. 适合同学聚会时玩的19个小游戏

    下半年的聚会很多,今天介绍19个适合同学聚会时玩的小游戏.想有更多参考,可看左岸以前的一篇文章<江湖经验:喝酒时玩的游戏大全!(杀人游戏.俄罗斯转盘-)> 一.传牙签 参与游戏者每人抽一张 ...

  4. opencv制作微信小游戏 最强连一连 辅助(1)--概述

    之前在b站上面看到一个人发布的一个视频 https://www.bilibili.com/video/av44383086?from=search&seid=34877549027742780 ...

  5. OpenCV玩微信小游戏星途WeGoing

    游戏模式 这是一个2D插画风格的益智游戏,玩家可以点击屏幕控制控制飞船在星球间飞跃,刚开始控制不好可能会撞上星球. 工具介绍 Python 3.5 Android 手机 Adb 驱动 原理说明 通过O ...

  6. opencv制作微信小游戏 最强连一连 辅助(2)--dfs深度优先搜索算法

    深度优先搜索算法还是大二上数据结构的时候学的,工作以后都忘得差不多了.赶紧回来温习一下吧. 深度优先搜索的算法的 入参是一个地图(一般可以用二维数组表示)和一个起始点. 比如 这个就是一个5*5的二维 ...

  7. opencv制作微信小游戏 最强连一连 辅助(3)--opencv matchTemplete多目标匹配

    上一篇我写了如何用dfs深度优先搜索算法来求解,入参是一个二维数组,这个二维数组是人为手动赋值的 这一篇我们来讲如何自动来完成这一过程. 也就是说 入参是一个 游戏的画面,出参是一个二维数组 如下图: ...

  8. python拼图游戏代码,OpenCV Python实现拼图小游戏

    基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下 效果展示 实现 思路 1.对图像进行分割,分割成m*n个子图 2.打乱子图的顺序 3.将子图重新组成一幅新的图片并显示 4.添加鼠标点击响应 ...

  9. python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...

    0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...

最新文章

  1. zencart 1.5.4 安装问题
  2. C#操作Excel时,Excel常用的方法和属性zz
  3. [部署]CentOS安装PHP环境
  4. Linux多线程同步——信号量
  5. (转)Unity3d UnityEditor编辑器定制和开发插件
  6. 判断域名来源的操作【window.location.host.indexOf(‘域名关键词‘)】 - 代码篇
  7. Asp.net页面之间传递参数的几种方法
  8. java jframe 对话框_java-如何将值从JDialog框返回到父JFrame?
  9. 最擅长玩《毁灭战士》的AI开源了 | 来自CMU的论文代码
  10. 30岁前挣到10万年薪 五位年轻人的高薪秘诀
  11. 【redis】redis的bind配置
  12. 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(一)
  13. 网友在各自领域中所用到的芯片总结(转载)
  14. docker使用已拉取的纯净python3.8镜像(应该为debian版本)制作detectron2 docker 镜像
  15. 计算机图片照片查看器为何打不开,电脑看相片时照片查看器打不开怎么办
  16. 如何实现电压、液位等模拟量信号的无线传输?
  17. Windows自动校正系统时间
  18. 深度学习目前的局限性之AI识别彻底懵逼!这到底是「牛」还是「鲨」?
  19. Nacos的连接拒接丶解决方案
  20. i7 9750H性能怎么样?相当于台式机什么水平?

热门文章

  1. 定位定位定位定位定位定定定定定位
  2. Python | 变量的引用
  3. datahub文档_实现datahub
  4. springboot内嵌Tomcat启动失败
  5. 利兹大学商学院和巴斯及本科申请要求
  6. HashMap源码理解
  7. redis集群配置和测试
  8. Cisco-SRWE-路由的概念和配置考试测试题
  9. 【JS】930- 更快的 async 函数和 promises
  10. 周末快乐。关于Live Mail Desktop