]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blobdiff - src/dynmem.hpp
Use new type MatDynMem combining cv::Mat and DynMem
[hercules2020/kcf.git] / src / dynmem.hpp
index c1d9bbb2ccd0df2c0c67e0c4d196243a3839db97..09e16e336d498bdb4cecadbdbfbc11903bb2e2bc 100644 (file)
@@ -2,6 +2,8 @@
 #define DYNMEM_HPP
 
 #include <cstdlib>
+#include <opencv2/opencv.hpp>
+#include <cassert>
 
 #if defined(CUFFT) || defined(CUFFTW)
 #include "cuda_runtime.h"
@@ -15,6 +17,8 @@ template <typename T> class DynMem_ {
     T *ptr_d = nullptr;
 
   public:
+    typedef T type;
+
     DynMem_()
     {}
     DynMem_(size_t size)
@@ -55,4 +59,15 @@ template <typename T> class DynMem_ {
     }
 };
 typedef DynMem_<float> DynMem;
+
+class MatDynMem : public DynMem, public cv::Mat {
+  public:
+    MatDynMem(cv::Size size, int type)
+        : DynMem(size.area() * sizeof(DynMem::type) * CV_MAT_CN(type)), cv::Mat(size, type, hostMem())
+    {
+        assert((type & CV_MAT_DEPTH_MASK) == CV_32F);
+    }
+    MatDynMem(int height, int width, int type) { MatDynMem(cv::Size(width, height), type); }
+};
+
 #endif // DYNMEM_HPP