for(int i=0;i
//*******************************************************************//
//随机调换所有的子图像序列的位置,用于在 Splite image中显示
//*******************************************************************//
void Randarrary( vector& vectorMat)
{
for(int i=0;i
//*******************************************************************//
//鼠标回调函数,用于获取需要查找的子图像在原图像中的位置,并在叠加显示在目标图像中
//*******************************************************************//
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
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