Код карты несоответствия в openCV C++
Я откалибровал и выпрямил стерео изображения в MATLAB, используя набор инструментов Caltech ( http://www.vision.caltech.edu/bouguetj/calib_doc/). Я испытал недовольство в 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);
}
и это ошибка, которую я получаю:
Необработанное исключение по адресу 0x000007FEFD4D940D в файле OPEN_CV_TEST.exe: исключение Microsoft C++: cv:: Исключение в расположении памяти 0x0000000000149260.
Я новичок в C++ и нет описания процедуры для запуска кода. поэтому я просто поместил эти левое и правое изображения в папку \x64\Debug моего проекта и запустил код в MS Visual Studio 2012 Windows 7 64 бит. Я создал проект раньше и провел пробный тест, и он работал. так что теперь я просто копирую приведенный выше код в основной исходный файл C++. Я предполагаю, что не должно быть никаких файлов библиотеки или файлов заголовков. Также, пожалуйста, обратите внимание, что мне не нужно исправлять изображения и не нужно стереофоническое согласование. любая помощь очень ценится.
1 ответ
Я понял! это была "непрочитанная" функция в OPENCV, которая вызывала проблемы! Я использовал "cvLoadImage" вместо этого. Я также помещаю изображения в папку проекта прямо рядом с файлами CPP, а также в папки DEBUG. Сейчас работает нормально. Видимо, функция "IMREAD" - известная проблема в OPENCV!