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 で同じ関数を使用することが目的です。

このようなマクロ (関数 opencv または変数、フラグなど) はありますか? 私の目的のために、そのようなポリシー クラス (構造体) を作成するのは良い方法ですか?

ありがとう

PS: 目的は、この cpp を python モジュールにバインドすることです。

4

0 に答える 0