0

如果 OpenCV 的 gpu 模块是否成功安装,我想创建一个以不同方式运行的类(结构)。例如,如果安装了 gpu 模块,我将使用gpu::meanShitFilteringelse cv::pyrMeanShiftFiltering。这里有一个例子:

template <typename ComputingPolicy>
struct Computing : public ComputingPolicy
{
    //virtual void filter(PyObject *, int, int) = 0;
    //TODO: add basic exceptionhandling on range spatial and array object
};


struct CpuComputing
{
    PyObject *ExceptionHandling(){//TODO: add specific exception for pyrMeanShiftfiltering
    }
    void filter(cv::Mat src, cv::Mat dst, int r, int s)
    {
        cv::pyrMeanShiftFiltering(src, dst, r, s);
    }
};

struct GpuComputing
{
    PyObject *ExceptionHandling(){//TODO: add specific exception for meanshiftfiltering
    }
    void filter(cv::Mat src, cv::Mat dst, int r, int s)
    {
        cv::gpu::GpuMat d_dst(src);
        cv::gpu::GpuMat d_src(src);
        cv::gpu::meanShiftFiltering(d_src, d_dst, r, s);
        d_dst.download(dst);
    }

};


#ifdef MACRO_INDICATING_GPU_MODULE_FROM_OPENCV_AVAILABLE
typedef Computing<GpuComputing> meanshift;
#else
typedef Computing<CpuComputing> meanshift;
#endif

目的是如果 MACRO 指示模块是否已安装,则在 gpu 或 cpu 上使用相同的功能。

有像这样的某种 MACRO(函数 opencv 或变量、标志 ...)吗?为我的目的创建这样的策略类(结构)是一种好方法吗?

谢谢

PS:目的是将这个cpp绑定到python模块中。

4

0 回答 0