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

  对OpenCV中的merge/split函数进行了实现,经测试,与OpenCV3.1结果完全一致。

 
merge实现代码merge.hpp:
  1. // fbc_cv是免费软件,并且使用与OpenCV相同的许可证  
  2. #ifndef FBC_CV_MERGE_HPP_  
  3. #define FBC_CV_MERGE_HPP_  
  4.   
  5. /* reference: include/opencv2/core.hpp 
  6.               core/src/convert.cpp 
  7.               core/src/merge.cpp 
  8. */  
  9.   
  10. #include <vector>  
  11. #include "core/mat.hpp"  
  12.   
  13. #ifndef __cplusplus  
  14.     #error merge.hpp header must be compiled as C++  
  15. #endif  
  16.   
  17. namespace fbc {  
  18.   
  19. // 合并几个数组以创建单个多通道数组
  20. template<typename _Tp, int chs1, int chs2>  
  21. int merge(const std::vector<Mat_<_Tp, chs1>>& src, Mat_<_Tp, chs2>& dst)  
  22. {  
  23.     FBC_Assert(dst.data != NULL);  
  24.     FBC_Assert((src.size() > 0) && (src.size() == dst.channels) && (src.size() <= FBC_CN_MAX));  
  25.     int width = src[0].cols;  
  26.     int height = src[0].rows;  
  27.     FBC_Assert((dst.cols == width) && (dst.rows == height));  
  28.     for (int i = 0; i < src.size(); i++) {  
  29.         FBC_Assert(src[i].data != NULL);  
  30.         FBC_Assert((src[i].cols == width) && src[i].rows == height);  
  31.         FBC_Assert(src[i].channels == 1);  
  32.     }  
  33.   
  34.     if (src.size() == 1) {  
  35.         memcpy(dst.data, src[0].data, dst.step * dst.rows);  
  36.         return 0;  
  37.     }  
  38.   
  39.     _Tp* pDst = (_Tp*)dst.data;  
  40.     int len = width * height;  
  41.     int cn = dst.channels;  
  42.   
  43.     for (int i = 0; i < src.size(); i++) {  
  44.         _Tp* pSrc = (_Tp*)src[i].data;  
  45.   
  46.         for (int j = 0; j < len; j++) {  
  47.             pDst[j * cn + i] = pSrc[j];  
  48.         }  
  49.     }  
  50.   
  51.     return 0;  
  52. }  
  53.   
  54. // 命名空间fbc
  55.   
  56. #endif // FBC_CV_MERGE_HPP_  

 1/4    1 2 3 4 下一页 尾页
 

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

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