aihot  2017-05-22 21:02:56  OpenCV |   查看评论   

merge测试代码:

  1. #include <assert.h>  
  2. #include <vector>  
  3. #include <core/mat.hpp>  
  4. #include <merge.hpp>  
  5.   
  6. #include <opencv2/opencv.hpp>  
  7.   
  8. #include "test_merge.hpp"  
  9.   
  10. int test_merge_uchar()  
  11. {  
  12.     cv::Mat matSrc1 = cv::imread("E:/GitCode/OpenCV_Test/test_images/lena.png", 1);  
  13.     cv::Mat matSrc2 = cv::imread("E:/GitCode/OpenCV_Test/test_images/1.jpg", 1);  
  14.     cv::Mat matSrc3 = cv::imread("E:/GitCode/OpenCV_Test/test_images/2.jpg", 1);  
  15.     if (!matSrc1.data || !matSrc2.data || !matSrc3.data) {  
  16.         std::cout << "read image fail" << std::endl;  
  17.         return -1;  
  18.     }  
  19.   
  20.     int width = 500, height = 600;  
  21.   
  22.     cv::cvtColor(matSrc1, matSrc1, CV_BGR2GRAY);  
  23.     cv::cvtColor(matSrc2, matSrc2, CV_BGR2GRAY);  
  24.     cv::cvtColor(matSrc3, matSrc3, CV_BGR2GRAY);  
  25.     cv::resize(matSrc1, matSrc1, cv::Size(width, height));  
  26.     cv::resize(matSrc2, matSrc2, cv::Size(width, height));  
  27.     cv::resize(matSrc3, matSrc3, cv::Size(width, height));  
  28.   
  29.     fbc::Mat_<fbc::uchar, 1> mat1(height, width, matSrc1.data);  
  30.     fbc::Mat_<fbc::uchar, 1> mat2(height, width, matSrc2.data);  
  31.     fbc::Mat_<fbc::uchar, 1> mat3(height, width, matSrc3.data);  
  32.     std::vector<fbc::Mat_<fbc::uchar, 1>> mat;  
  33.     mat.push_back(mat1);  
  34.     mat.push_back(mat2);  
  35.     mat.push_back(mat3);  
  36.     fbc::Mat_<fbc::uchar, 3> matDst(height, width);  
  37.     fbc::merge(mat, matDst);  
  38.   
  39.     std::vector<cv::Mat> mat_;  
  40.     mat_.push_back(matSrc1);  
  41.     mat_.push_back(matSrc2);  
  42.     mat_.push_back(matSrc3);  
  43.     cv::Mat matDst_;  
  44.     cv::merge(mat_, matDst_);  
  45.   
  46.     assert(matDst.channels == matDst_.channels());  
  47.     assert((matDst.rows == matDst_.rows) && (matDst.cols == matDst_.cols));  
  48.     assert(matDst.step == matDst_.step);  
  49.   
  50.     for (int i = 0; i < matDst.rows; i++) {  
  51.         const fbc::uchar* p1 = matDst.ptr(i);  
  52.         const uchar* p2 = matDst_.ptr(i);  
  53.   
  54.         for (int j = 0; j < matDst.step; j++) {  
  55.             assert(p1[j] == p2[j]);  
  56.         }  
  57.     }  
  58.   
  59.     return 0;  
  60. }  
  61.   
  62. int test_merge_float()  
  63. {  
  64.     cv::Mat matSrc1 = cv::imread("E:/GitCode/OpenCV_Test/test_images/lena.png", 1);  
  65.     cv::Mat matSrc2 = cv::imread("E:/GitCode/OpenCV_Test/test_images/1.jpg", 1);  
  66.     cv::Mat matSrc3 = cv::imread("E:/GitCode/OpenCV_Test/test_images/2.jpg", 1);  
  67.     if (!matSrc1.data || !matSrc2.data || !matSrc3.data) {  
  68.         std::cout << "read image fail" << std::endl;  
  69.         return -1;  
  70.     }  
  71.   
  72.     int width = 500, height = 600;  
  73.   
  74.     cv::cvtColor(matSrc1, matSrc1, CV_BGR2GRAY);  
  75.     cv::cvtColor(matSrc2, matSrc2, CV_BGR2GRAY);  
  76.     cv::cvtColor(matSrc3, matSrc3, CV_BGR2GRAY);  
  77.     cv::resize(matSrc1, matSrc1, cv::Size(width, height));  
  78.     cv::resize(matSrc2, matSrc2, cv::Size(width, height));  
  79.     cv::resize(matSrc3, matSrc3, cv::Size(width, height));  
  80.     matSrc1.convertTo(matSrc1, CV_32FC1);  
  81.     matSrc2.convertTo(matSrc2, CV_32FC1);  
  82.     matSrc3.convertTo(matSrc3, CV_32FC1);  
  83.   
  84.     fbc::Mat_<float, 1> mat1(height, width, matSrc1.data);  
  85.     fbc::Mat_<float, 1> mat2(height, width, matSrc2.data);  
  86.     fbc::Mat_<float, 1> mat3(height, width, matSrc3.data);  
  87.     std::vector<fbc::Mat_<float, 1>> mat;  
  88.     mat.push_back(mat1);  
  89.     mat.push_back(mat2);  
  90.     mat.push_back(mat3);  
  91.     fbc::Mat_<float, 3> matDst(height, width);  
  92.     fbc::merge(mat, matDst);  
  93.   
  94.     std::vector<cv::Mat> mat_;  
  95.     mat_.push_back(matSrc1);  
  96.     mat_.push_back(matSrc2);  
  97.     mat_.push_back(matSrc3);  
  98.     cv::Mat matDst_;  
  99.     cv::merge(mat_, matDst_);  
  100.   
  101.     assert(matDst.channels == matDst_.channels());  
  102.     assert((matDst.rows == matDst_.rows) && (matDst.cols == matDst_.cols));  
  103.     assert(matDst.step == matDst_.step);  
  104.   
  105.     for (int i = 0; i < matDst.rows; i++) {  
  106.         const fbc::uchar* p1 = matDst.ptr(i);  
  107.         const uchar* p2 = matDst_.ptr(i);  
  108.   
  109.         for (int j = 0; j < matDst.step; j++) {  
  110.             assert(p1[j] == p2[j]);  
  111.         }  
  112.     }  
  113.   
  114.     return 0;  
  115. }  

 

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV的代码提取:合并/拆分(merge/split)函数的实现

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]