1. 程式人生 > >OpenCV簡單的拼接多幅影象

OpenCV簡單的拼接多幅影象

由於最近在學習超解析度演算法,但是大多數開源程式輸入圖片太大就顯示視訊記憶體不夠,因此就把手機拍攝的圖片先分割成一系列小的圖片,超解析度之後再憑藉在一塊

OpenCV的程式如下:比較簡單,對5x5即25張圖片進行拼接:

#include <iostream> #include <core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2/stitching.hpp>

using namespace std; using namespace cv; int main() {     int i = 0,j=0;     Mat combine;     Mat row[5][5], column[5];     Mat com_row[5][5], con_column[5];

    row[0][0] = imread("C:\\test\\pic_div\\1-1.jpg");     row[0][1] = imread("C:\\test\\pic_div\\1-2.jpg");     row[0][2] = imread("C:\\test\\pic_div\\1-3.jpg");     row[0][3] = imread("C:\\test\\pic_div\\1-4.jpg");     row[0][4] = imread("C:\\test\\pic_div\\1-5.jpg");

    row[1][0] = imread("C:\\test\\pic_div\\2-1.jpg");     row[1][1] = imread("C:\\test\\pic_div\\2-2.jpg");     row[1][2] = imread("C:\\test\\pic_div\\2-3.jpg");     row[1][3] = imread("C:\\test\\pic_div\\2-4.jpg");     row[1][4] = imread("C:\\test\\pic_div\\2-5.jpg");

    row[2][0] = imread("C:\\test\\pic_div\\3-1.jpg");     row[2][1] = imread("C:\\test\\pic_div\\3-2.jpg");     row[2][2] = imread("C:\\test\\pic_div\\3-3.jpg");     row[2][3] = imread("C:\\test\\pic_div\\3-4.jpg");     row[2][4] = imread("C:\\test\\pic_div\\3-5.jpg");

    row[3][0] = imread("C:\\test\\pic_div\\4-1.jpg");     row[3][1] = imread("C:\\test\\pic_div\\4-2.jpg");     row[3][2] = imread("C:\\test\\pic_div\\4-3.jpg");     row[3][3] = imread("C:\\test\\pic_div\\4-4.jpg");     row[3][4] = imread("C:\\test\\pic_div\\4-5.jpg");

    row[4][0] = imread("C:\\test\\pic_div\\5-1.jpg");     row[4][1] = imread("C:\\test\\pic_div\\5-2.jpg");     row[4][2] = imread("C:\\test\\pic_div\\5-3.jpg");     row[4][3] = imread("C:\\test\\pic_div\\5-4.jpg");     row[4][4] = imread("C:\\test\\pic_div\\5-5.jpg");

    //cv::resize(a, a, cv::Size(1984, 1488), 0, 0, CV_INTER_LINEAR);     //cv::resize(b, b, cv::Size(1984, 1488), 0, 0, CV_INTER_LINEAR);     //cv::resize(c, c, cv::Size(1984, 1488), 0, 0, CV_INTER_LINEAR);     //cv::resize(d, d, cv::Size(1984, 1488), 0, 0, CV_INTER_LINEAR);     //水平拼接     com_row[0][0] = row[0][0];     com_row[1][0] = row[1][0];     com_row[2][0] = row[2][0];     com_row[3][0] = row[3][0];     com_row[4][0] = row[4][0];     for (i = 0; i < 5; i = i + 1)     {         for (j = 0; j < 4; j = j + 1)         {             hconcat(com_row[i][j], row[i][j+1], com_row[i][j+1]);         }         column[i] = com_row[i][4];   //產生的每一行的拼接圖片     }     //垂直拼接     con_column[0] = column[0];     for (i = 0; i < 4; i = i + 1)     {         vconcat(con_column[i], column[i + 1], con_column[i + 1]);     }     combine = con_column[4];     namedWindow("Combine", CV_WINDOW_AUTOSIZE);     imshow("Combine", combine);     imwrite("Combine.png", combine);     cv::waitKey(1);

    system("pause");     return 0; }

拼接 之前的圖片:

拼接之後: