OpenCV-19拼图板小游戏
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拼图板小游戏相关推荐
- 【笔记】Opencv 实现拼图板小游戏
for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){Mat SourceRoi=Sourceimage(Rect(j*Roicols,i*Roi ...
- 90年代经典“手游”—拼图板小游戏Opencv实现
80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也 ...
- 适合同学聚会时玩的19个小游戏
下半年的聚会很多,今天介绍19个适合同学聚会时玩的小游戏.想有更多参考,可看左岸以前的一篇文章<江湖经验:喝酒时玩的游戏大全!(杀人游戏.俄罗斯转盘-)> 一.传牙签 参与游戏者每人抽一张 ...
- opencv制作微信小游戏 最强连一连 辅助(1)--概述
之前在b站上面看到一个人发布的一个视频 https://www.bilibili.com/video/av44383086?from=search&seid=34877549027742780 ...
- OpenCV玩微信小游戏星途WeGoing
游戏模式 这是一个2D插画风格的益智游戏,玩家可以点击屏幕控制控制飞船在星球间飞跃,刚开始控制不好可能会撞上星球. 工具介绍 Python 3.5 Android 手机 Adb 驱动 原理说明 通过O ...
- opencv制作微信小游戏 最强连一连 辅助(2)--dfs深度优先搜索算法
深度优先搜索算法还是大二上数据结构的时候学的,工作以后都忘得差不多了.赶紧回来温习一下吧. 深度优先搜索的算法的 入参是一个地图(一般可以用二维数组表示)和一个起始点. 比如 这个就是一个5*5的二维 ...
- opencv制作微信小游戏 最强连一连 辅助(3)--opencv matchTemplete多目标匹配
上一篇我写了如何用dfs深度优先搜索算法来求解,入参是一个二维数组,这个二维数组是人为手动赋值的 这一篇我们来讲如何自动来完成这一过程. 也就是说 入参是一个 游戏的画面,出参是一个二维数组 如下图: ...
- python拼图游戏代码,OpenCV Python实现拼图小游戏
基于OpenCV实现拼图版小游戏,供大家参考,具体内容如下 效果展示 实现 思路 1.对图像进行分割,分割成m*n个子图 2.打乱子图的顺序 3.将子图重新组成一幅新的图片并显示 4.添加鼠标点击响应 ...
- python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...
0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...
最新文章
- zencart 1.5.4 安装问题
- C#操作Excel时,Excel常用的方法和属性zz
- [部署]CentOS安装PHP环境
- Linux多线程同步——信号量
- (转)Unity3d UnityEditor编辑器定制和开发插件
- 判断域名来源的操作【window.location.host.indexOf(‘域名关键词‘)】 - 代码篇
- Asp.net页面之间传递参数的几种方法
- java jframe 对话框_java-如何将值从JDialog框返回到父JFrame?
- 最擅长玩《毁灭战士》的AI开源了 | 来自CMU的论文代码
- 30岁前挣到10万年薪 五位年轻人的高薪秘诀
- 【redis】redis的bind配置
- 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(一)
- 网友在各自领域中所用到的芯片总结(转载)
- docker使用已拉取的纯净python3.8镜像(应该为debian版本)制作detectron2 docker 镜像
- 计算机图片照片查看器为何打不开,电脑看相片时照片查看器打不开怎么办
- 如何实现电压、液位等模拟量信号的无线传输?
- Windows自动校正系统时间
- 深度学习目前的局限性之AI识别彻底懵逼!这到底是「牛」还是「鲨」?
- Nacos的连接拒接丶解决方案
- i7 9750H性能怎么样?相当于台式机什么水平?