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 で同じ関数を使用することが目的です。
このようなマクロ (関数 opencv または変数、フラグなど) はありますか? 私の目的のために、そのようなポリシー クラス (構造体) を作成するのは良い方法ですか?
ありがとう
PS: 目的は、この cpp を python モジュールにバインドすることです。