/// 全景拼接.cpp : 定义控制台应用程序的入口点。
//*下面注释掉网上的库函数例程代码*/
//bool try_use_gpu = false;
//vector<Mat> imgs;
//using namespace std;
//using namespace cv;
//string IMAGE_PATH_PREFIX = "data1/";
//Mat img = imread(IMAGE_PATH_PREFIX+"1.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "2.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "3.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "4.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "5.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "6.jpg");
// imgs.push_back(img);
// cout << "finish "<<imgs.size()<<endl;
// Mat pano;//拼接结果图片
// //Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
// Stitcher stitcher = Stitcher::createDefault(true);
// Stitcher::Status status = stitcher.stitch(imgs, pano);
// if (status != Stitcher::OK)
// {
// cout << "Can't stitch images, error code = " << int(status) << endl;
// return -1;
// }
// imwrite(result_name, pano);
// imwrite(result_name, pano);
// waitKey(0);
// return 0;
//*下面注释掉网上的库函数例程代码*/
//bool try_use_gpu = false;
//vector<Mat> imgs;
//using namespace std;
//using namespace cv;
//string IMAGE_PATH_PREFIX = "data1/";
//Mat img = imread(IMAGE_PATH_PREFIX+"1.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "2.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "3.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "4.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "5.jpg");
// imgs.push_back(img);
// img = imread(IMAGE_PATH_PREFIX + "6.jpg");
// imgs.push_back(img);
// cout << "finish "<<imgs.size()<<endl;
// Mat pano;//拼接结果图片
// //Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
// Stitcher stitcher = Stitcher::createDefault(true);
// Stitcher::Status status = stitcher.stitch(imgs, pano);
// if (status != Stitcher::OK)
// {
// cout << "Can't stitch images, error code = " << int(status) << endl;
// return -1;
// }
// imwrite(result_name, pano);
// imwrite(result_name, pano);
// waitKey(0);
// return 0;
//void CalcCorners(const Mat& H, const Mat& src)
//{
// double v2[] = { 0, 0, 1 };//左上角
// double v1[3];//变换后的坐标值
// Mat V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// Mat V1 = Mat(3, 1, CV_64FC1, v1); //列向量
//
// V1 = H * V2;
// //左上角(0,0,1)
// corners.left_top.x = v1[0] / v1[2];
// corners.left_top.y = v1[1] / v1[2];
//
// //左下角(0,src.rows,1)
// v2[0] = 0;
// v2[1] = src.rows;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.left_bottom.x = v1[0] / v1[2];
// corners.left_bottom.y = v1[1] / v1[2];
//
// //右上角(src.cols,0,1)
// v2[0] = src.cols;
// v2[1] = 0;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.right_top.x = v1[0] / v1[2];
// corners.right_top.y = v1[1] / v1[2];
//
// //右下角(src.cols,src.rows,1)
// v2[0] = src.cols;
// v2[1] = src.rows;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.right_bottom.x = v1[0] / v1[2];
// corners.right_bottom.y = v1[1] / v1[2];
//
//}
//{
// double v2[] = { 0, 0, 1 };//左上角
// double v1[3];//变换后的坐标值
// Mat V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// Mat V1 = Mat(3, 1, CV_64FC1, v1); //列向量
//
// V1 = H * V2;
// //左上角(0,0,1)
// corners.left_top.x = v1[0] / v1[2];
// corners.left_top.y = v1[1] / v1[2];
//
// //左下角(0,src.rows,1)
// v2[0] = 0;
// v2[1] = src.rows;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.left_bottom.x = v1[0] / v1[2];
// corners.left_bottom.y = v1[1] / v1[2];
//
// //右上角(src.cols,0,1)
// v2[0] = src.cols;
// v2[1] = 0;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.right_top.x = v1[0] / v1[2];
// corners.right_top.y = v1[1] / v1[2];
//
// //右下角(src.cols,src.rows,1)
// v2[0] = src.cols;
// v2[1] = src.rows;
// v2[2] = 1;
// V2 = Mat(3, 1, CV_64FC1, v2); //列向量
// V1 = Mat(3, 1, CV_64FC1, v1); //列向量
// V1 = H * V2;
// corners.right_bottom.x = v1[0] / v1[2];
// corners.right_bottom.y = v1[1] / v1[2];
//
//}
//typedef struct
//{
// Point2f left_top;
// Point2f left_bottom;
// Point2f right_top;
// Point2f right_bottom;
//}four_corners_t;
//four_corners_t corners;
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2/features2d/features2d.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<iostream>
#include <opencv2/stitching/stitcher.hpp>
using namespace cv;
using namespace std;
string IMAGE_PATH_PREFIX = "data1/";
cv::Mat Stitcher2pic(const cv::Mat &srcimage1, const cv::Mat &srcimage2);
cv::Mat Stitcher3pic(cv::Mat &srcimage1, cv::Mat &srcimage2, cv::Mat& image1_2);
std::vector<cv::Mat> imgs;
cv::Mat imagedisplacement(cv::Mat &src, int x, int y);
cv::Mat Stitcher4pic(cv::Mat &srcimage1, cv::Mat &srcimage2, cv::Mat& image123);
cv::Mat Stitcher6pic(cv::Mat &srcimage1, cv::Mat &srcimage2);
int main()
{
Mat img = imread(IMAGE_PATH_PREFIX + "1.jpg");
resize(img, img, cv::Size(), 0.5, 0.5
//{
// Point2f left_top;
// Point2f left_bottom;
// Point2f right_top;
// Point2f right_bottom;
//}four_corners_t;
//four_corners_t corners;
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2/features2d/features2d.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<iostream>
#include <opencv2/stitching/stitcher.hpp>
using namespace cv;
using namespace std;
string IMAGE_PATH_PREFIX = "data1/";
cv::Mat Stitcher2pic(const cv::Mat &srcimage1, const cv::Mat &srcimage2);
cv::Mat Stitcher3pic(cv::Mat &srcimage1, cv::Mat &srcimage2, cv::Mat& image1_2);
std::vector<cv::Mat> imgs;
cv::Mat imagedisplacement(cv::Mat &src, int x, int y);
cv::Mat Stitcher4pic(cv::Mat &srcimage1, cv::Mat &srcimage2, cv::Mat& image123);
cv::Mat Stitcher6pic(cv::Mat &srcimage1, cv::Mat &srcimage2);
int main()
{
Mat img = imread(IMAGE_PATH_PREFIX + "1.jpg");
resize(img, img, cv::Size(), 0.5, 0.5