{
DfsOCV::DfsOCV() :
mDfsOcv(nullptr),
- mDepthParam(),
+ mDfsParam(),
mNumDisparities(179),
mBlockSize(5),
mMinDisparity(32),
mP1(24*3),
mP2(96*3),
- mPreFilterCap(63)
+ mPreFilterCap(63),
+ mDispMat(),
+ mDepthData()
{
LOGI("ENTER");
LOGI("LEAVE");
LOGI("LEAVE");
}
- void DfsOCV::Initialize(DepthParameter& param)
+ void DfsOCV::Initialize(DfsParameter& param)
{
LOGI("ENTER");
- mDepthParam = param;
+ mDfsParam = param;
mDfsOcv = cv::StereoSGBM::create(1, mNumDisparities, mBlockSize);
LOGI("LEAVE");
}
+ int DfsOCV::ConvertDfsDataTypeToCV(int type)
+ {
+ LOGI("LEAVE");
+ switch (type) {
+ case DFS_DATA_TYPE_UINT8:
+ return CV_8UC1;
+ default:
+ LOGE("Invalide type");
+ }
+
+ return -1;
+
+ LOGI("ENTER");
+ }
+ void DfsOCV::Run(DfsData& base, DfsData& extra)
+ {
+ LOGI("ENTER");
+
+ if (!base.data || !extra.data) {
+ throw std::runtime_error("invalid data pointer");
+ }
+
+ int baseCvType = ConvertDfsDataTypeToCV(base.type);
+ int extraCvType = ConvertDfsDataTypeToCV(base.type);
+ if (baseCvType < 0 || extraCvType < 0) {
+ throw std::runtime_error("invalid data type");
+ }
+
+ cv::Mat baseMat(cv::Size(base.width, base.height), baseCvType, base.data);
+ cv::Mat extraMat(cv::Size(extra.width, extra.height), extraCvType, extra.data);
+
+ if (baseMat.size() != extraMat.size()) {
+ throw std::runtime_error("base and extra should be the same size");
+ }
+
+ if (baseMat.type() != extraMat.type()) {
+ throw std::runtime_error("base and extra should be the type");
+ }
+
+ mDfsOcv->compute(baseMat, extraMat, mDispMat);
+
+ mDepthData.data = mDispMat.data;
+ mDepthData.type = DFS_DATA_TYPE_UINT8;
+ mDepthData.width = mDispMat.cols;
+ mDepthData.height = mDispMat.rows;
+ mDepthData.stride = mDispMat.elemSize();
+
+ LOGI("LEAVE");
+ }
+
+ DfsData& DfsOCV::GetDepthData()
+ {
+ LOGI("ENTER");
+
+ return mDepthData;
+
+ LOGI("LEAVE");
+ }
+
extern "C"
{
class IDfsAdaptation *AdaptorInit(void)
private:
cv::Ptr<cv::StereoSGBM> mDfsOcv;
- DepthParameter mDepthParam;
+ DfsParameter mDfsParam;
size_t mNumDisparities;
size_t mBlockSize;
size_t mMinDisparity;
size_t mP2;
size_t mPreFilterCap;
+ cv::Mat mDispMat;
+ DfsData mDepthData;
+
void SetParameters();
+ int ConvertDfsDataTypeToCV(int type);
public:
DfsOCV();
~DfsOCV();
- void Initialize(DepthParameter& param) override;
+ void Initialize(DfsParameter& param) override;
+ void Run(DfsData& base, DfsData& extra) override;
+
+ DfsData& GetDepthData() override;
};
}