Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类型cv::StereoBM必须实现继承的纯虚拟方法_C++_Opencv_Virtual_Stereo 3d_Disparity Mapping - Fatal编程技术网

C++ 类型cv::StereoBM必须实现继承的纯虚拟方法

C++ 类型cv::StereoBM必须实现继承的纯虚拟方法,c++,opencv,virtual,stereo-3d,disparity-mapping,C++,Opencv,Virtual,Stereo 3d,Disparity Mapping,我一直在努力使用StereoBM类基于两个摄像头输入源生成视差图 我可以创建一个定点变量StereoBM*sbmto sbm的所有实例。这样,您将在堆栈上分配一个可以使用的StereoBM对象,而不是指向未定义位置的指针,当您尝试取消引用它时,它将崩溃。谢谢,这正是我所需要的。我的代码现在运行,我可以继续我的项目。我会投赞成票,但我没有足够的声誉。

我一直在努力使用StereoBM类基于两个摄像头输入源生成视差图

我可以创建一个定点变量
StereoBM*sbmmalloc():内存损坏
,调试生成中止时将不会运行

Disparity_Map::Disparity_Map(int rows, int cols, int type) : inputLeft(), inputRight(), greyLeft(), greyRight(), Disparity() {
    inputLeft.create(rows, cols, type);
    inputRight.create(rows, cols, type);

    greyLeft.create(rows, cols, type);
    greyRight.create(rows, cols, type);
}
void Disparity_Map::computeDisparity(){

    cvtColor(inputLeft, greyLeft, CV_BGR2GRAY);
    cvtColor(inputRight, greyRight, CV_BGR2GRAY);

    StereoBM *sbm;

    // This is where the segfault/memory corruption occurs
    sbm->setNumDisparities(112);
    sbm->setBlockSize(9);
    sbm->setPreFilterCap(61);
    sbm->setPreFilterSize(5);
    sbm->setTextureThreshold(500);
    sbm->setSpeckleWindowSize(0);
    sbm->setSpeckleRange(8);
    sbm->setMinDisparity(0);
    sbm->setUniquenessRatio(0);
    sbm->setDisp12MaxDiff(1);

    sbm->compute(greyLeft, greyRight, Disparity);
    normalize(Disparity, Disparity, 0, 255, CV_MINMAX, CV_8U);
}
我不完全确定我在上面做了什么错事。创建非指针变量时,我对该类的所有方法都有以下警告:

类型“cv::StereoBM”必须实现继承的纯虚拟方法“cv::StereoMatcher::setSpeckleRange”

我已经包含了标题
,我已经确保了库是链接的,并且我正在运行opencv 3.1.0

有人能解释以上所有的问题吗?因为我还在学习OpenCV,并通过C++来推动自己。

StereoBM *sbm;
声明指针而不分配对象


cv::Ptr sbm=cv::StereoBM::create()
-这是创建StereoBM对象的正确方法。

能否提供一个小片段来重现错误?Se如何做一个我用opencv 3.1.0尝试使用的代码更新了原始帖子,当设置sbm作为指针时,另一个错误是当我定义
StereoBM sbm
代码编译的其他内容时,您定义了一个指向SMB的指针,但实际上并没有创建一个。请详细说明您的注释Change StereoBM*sbm;至StereoBM sbm。。。以及sbm->to sbm的所有实例。这样,您将在堆栈上分配一个可以使用的StereoBM对象,而不是指向未定义位置的指针,当您尝试取消引用它时,它将崩溃。谢谢,这正是我所需要的。我的代码现在运行,我可以继续我的项目。我会投赞成票,但我没有足够的声誉。