如果 OpenCV 的 gpu 模块是否成功安装,我想创建一个以不同方式运行的类(结构)。例如,如果安装了 gpu 模块,我将使用gpu::meanShitFiltering
else 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模块中。