openCV C++中的视差图代码

ds97pgxw  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(159)

我已经校准和立体校正图像在MATLAB使用加州理工学院的工具箱(http://www.vision.caltech.edu/bouguetj/calib_doc/)。我尝试了disaprity在MATLAB和它没有返回良好的结果,现在我想尝试它在OPENCV。我找不到任何OPENCV样本代码的差异从他们的网站。所以这是我找到的代码到目前为止:(代码来自http://www.jayrambhia.com/blog/disparity-maps/

#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/contrib/contrib.hpp"
#include <stdio.h>
#include <string.h>
using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
Mat img1, img2, g1, g2;
Mat disp, disp8;

//char* method = argv[3];
char* method = "SGBM";

//img1 = imread(argv[1]);
//img2 = imread(argv[2]);
img1 = imread("leftImage.jpg");
img2 = imread("rightImage.jpg");

cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);

if (!(strcmp(method, "BM")))
{
    StereoBM sbm;
    sbm.state->SADWindowSize = 9;
    sbm.state->numberOfDisparities = 112;
    sbm.state->preFilterSize = 5;
    sbm.state->preFilterCap = 61;
    sbm.state->minDisparity = -39;
    sbm.state->textureThreshold = 507;
    sbm.state->uniquenessRatio = 0;
    sbm.state->speckleWindowSize = 0;
    sbm.state->speckleRange = 8;
    sbm.state->disp12MaxDiff = 1;
    sbm(g1, g2, disp);
}
else if (!(strcmp(method, "SGBM")))
{
    StereoSGBM sbm;
    sbm.SADWindowSize = 3;
    sbm.numberOfDisparities = 144;
    sbm.preFilterCap = 63;
    sbm.minDisparity = -39;
    sbm.uniquenessRatio = 10;
    sbm.speckleWindowSize = 100;
    sbm.speckleRange = 32;
    sbm.disp12MaxDiff = 1;
    sbm.fullDP = false;
    sbm.P1 = 216;
    sbm.P2 = 864;
    sbm(g1, g2, disp);
}

normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);

imshow("left", img1);
imshow("right", img2);
imshow("disp", disp8);

waitKey(0);

return(0);

}
这就是我得到的错误:

OPEN_CV_TEST.exe中0x000007FEFD4D940D处的未处理异常:Microsoft C++例外状况:cv::内存位置0x000000000149260处出现异常。

我是C新手,没有关于运行代码的过程的描述。所以我只是把这些左和右图像放在我的项目的**\x64\Debug**文件夹中,并在MS Visual Studio 2012 Windows 7 64位中运行代码。我之前创建了该项目,并运行了一个示例测试,它工作正常。所以现在我只是在主C源文件中复制上述代码。我假设不应该有任何库文件或头文件丢失。也请注意,我不需要需要纠正图像,也不需要立体匹配现在。任何帮助都非常感谢。

uz75evzq

uz75evzq1#

我发现了!是OPENCV中的“imread”函数导致了问题!我用“cvLoadImage”代替了它。我还把图像放在了项目文件夹中紧挨着CPP文件的位置,也放在了DEBUG文件夹中。现在它工作得很好。显然“IMREAD”函数是OPENCV中的一个已知问题!

相关问题