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);}}

//*******************************************************************//
//随机调换所有的子图像序列的位置,用于在 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 ROIS=Sourceimage(Rect(maxP.x,maxP.y,Roicols,Roirows));Mat ROIDst=Dstimage(Rect(minP.x,minP.y,Roicols,Roirows));addWeighted(ROIDst,0,RoiSpilte,1,0,ROIDst,-1);imshow("Jigsaw image",Dstimage);}

#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 main(int argc,char*argv[])
{Sourceimage=imread(argv[1]);imshow("Source image",Sourceimage);rows=atoi(argv[2]);cols=atoi(argv[3]);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();}//*******************************************************************//
//随机调换所有的子图像序列的位置,用于在 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);}
}

【笔记】Opencv 实现拼图板小游戏相关推荐

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

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

  2. 【Python学习笔记】猜颜色小游戏

    [Python学习笔记]猜颜色小游戏 前言 一.算法原理 1. 生成器部分 2. 检测器部分 二.代码 过程BUG汇总笔记 总结 前言 最近馋世界游戏大全51,心血来潮用Python写了个猜颜色,顺便 ...

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

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

  4. Unity3D笔记---简单的捕鱼小游戏

    说是捕鱼达人小游戏,其实也没有完全实现捕鱼的功能,只是一个Unity3D前期学习过程中对于Sprite2D的运用,下面我来介绍一下我的界面 界面组成很简单,主要是生成鱼,以及与的运动,子弹的运动,碰撞 ...

  5. OpenCV-19拼图板小游戏

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

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

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

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

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

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

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

  9. Three.js 学习笔记 - 给跳一跳小游戏添加光源,阴影

    一. 修改物体材质 接着上一篇的项目,在上一篇中物体的材质都是用的MeshBasicMaterial这种材质,这种材质是不受光照的影响的,所以要修改成MeshPhongMaterial这种材质,让它受 ...

最新文章

  1. C#.NET跨线程控件的相关操作
  2. 2021夏季每日一题 【week2 未完结】
  3. 计算机什么存放bois程序,[硬件维护]问一个基础性的问题:BIOS程序到底存放在哪个芯片里?...
  4. 看视频时,类加载器没太理解,现在再整理下几个要点
  5. oracle过滤器基础,示例过滤器表达式 (Oracle Solaris Studio 12.2:性能分析器)
  6. 苹果手机关闭自动更新_苹果手机会quot;偷钱quot;的2个功能,越早关闭越好,不然经常无故被扣钱...
  7. vba 根据分辨率 缩放显示比例_GANTTER.VBA.初体验
  8. 【房价预测】基于matlab遗传算法优化BP神经网络房价预测【含Matlab源码 592期】
  9. Python爬虫实战--斗鱼直播爬虫
  10. python图像处理(十一)——图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子、Laplacian算子
  11. MSSQL 2000 823错误原因分析及数据恢复方案
  12. 解决Linux服务器时差问题
  13. wechaty-微信聊天机器人-调研分析
  14. GaRy-Liang的linux成长日记12-算术预算与测试
  15. 系统分析员、系统架构师、项目经理的区别
  16. QT 简单五子棋实现
  17. 1.EKL在项目中担当的位置
  18. 28. 如何使用 SAP OData 服务向 ABAP 服务器上传文本格式和 Excel,PDF 等格式的文件
  19. 直播预告 | NeurIPS 专场六 青年科学家专场
  20. matlab三维数据切片二维

热门文章

  1. 视频截帧大概率避免连续重复图片
  2. 自学Python要学多久可以学会?
  3. 【Windows】Windows Server 2008 R2 安装 .Net Framework 4.5
  4. 新手小白第一次使用VisualStudio的简单配置教程
  5. 安卓带力度的电子签名的实现
  6. 如何在淘宝普通店铺宝贝描述里添加背景图片添加 - 生活至上,美容至尚!
  7. 机器人小车的运动模型
  8. 关于Socket.Receive()与Send()的常见问题
  9. 小红书达人等级划分?小红书垂类达人怎么看
  10. 装修工人转行程序员,月薪过万