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

【笔记】Opencv 实现拼图板小游戏_第1张图片

【笔记】Opencv 实现拼图板小游戏_第2张图片

for(int i=0;i

 

//*******************************************************************//
//随机调换所有的子图像序列的位置,用于在 Splite image中显示
//*******************************************************************//
void Randarrary( vector& vectorMat)
{
	for(int i=0;i

【笔记】Opencv 实现拼图板小游戏_第3张图片

//*******************************************************************//
//鼠标回调函数,用于获取需要查找的子图像在原图像中的位置,并在叠加显示在目标图像中
//*******************************************************************//
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);
 
	}

【笔记】Opencv 实现拼图板小游戏_第4张图片

【笔记】Opencv 实现拼图板小游戏_第5张图片

#include "core/core.hpp"
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
#include 
 
using namespace cv;
 
Mat Sourceimage,Spilteimage,Rebuildimage,Dstimage;
int rows,cols;
int Roirows,Roicols;
vectorarraryimage;
void Randarrary( vector &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& vectorMat)
{
	for(int i=0;i

你可能感兴趣的:(OpenCV,opencv)