双目视觉中的立体校正0xC0000005: 写入位置 0x001C0FFC 时发生访问冲突。
新手一枚请大神分析一下,谢谢!下面是代码
#include<opencv2/opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
cout << "测试两个摄像头同时读取数据" << endl;
//读入左右摄像机的内外参数,以及R和T;
CvMat *Intrinsics_Camera_Left = (CvMat*)cvLoad("M1.xml");
CvMat *Intrinsics_Camera_Right = (CvMat*)cvLoad("M2.xml");
CvMat *Distortion_Camera_Left = (CvMat*)cvLoad("D1.xml");
CvMat *Distortion_Camera_Right = (CvMat*)cvLoad("D2.xml");
CvMat *Translation_matlab = (CvMat*)cvLoad("T.xml");
CvMat *RotRodrigues_matlab = (CvMat*)cvLoad("R.xml");
//CvMat *R_opencv = cvCreateMat(3, 3, CV_64F);
//cvRodrigues2(RotRodrigues_matlab, R_opencv); //罗德里格斯矩阵转换成3*3矩阵;
//创建映射矩阵;
IplImage *Left_Mapx = cvCreateImage(cvSize(1280, 960), IPL_DEPTH_32F, 1);
IplImage *Left_Mapy = cvCreateImage(cvSize(1280, 960), IPL_DEPTH_32F, 1);
IplImage *Right_Mapx = cvCreateImage(cvSize(1280, 960), IPL_DEPTH_32F, 1);
IplImage *Right_Mapy = cvCreateImage(cvSize(1280, 960), IPL_DEPTH_32F, 1);
CvMat*Rl = cvCreateMat(3, 3, CV_64F);
CvMat*Rr = cvCreateMat(3, 3, CV_64F);
CvMat*Pl = cvCreateMat(3, 4, CV_64F);
CvMat*Pr = cvCreateMat(3, 4, CV_64F);
//立体校正
cvStereoRectify(Intrinsics_Camera_Left, Intrinsics_Camera_Right, Distortion_Camera_Left, Distortion_Camera_Right,
cvSize(1280, 960), RotRodrigues_matlab, Translation_matlab,
Rl, Rr, Pl, Pr, 0, 1024,0);
//增加图像缩放,去除死区
cvInitUndistortRectifyMap(Intrinsics_Camera_Left, Distortion_Camera_Left, Rl, Pl,
Left_Mapx, Left_Mapy);
cvInitUndistortRectifyMap(Intrinsics_Camera_Right, Distortion_Camera_Right, Rr, Pr,
Right_Mapx, Right_Mapy);
IplImage *img0, *img1;
IplImage *img_left, *img_right;
IplImage *img_left_Change, *img_right_Change;
cvNamedWindow("camera_left",0);
cvNamedWindow("camera_right",0);
cvNamedWindow("camera_left_Change",0);
cvNamedWindow("camera_right_Change",0);
img0 = cvLoadImage("l.jpg", 1);
assert(img0 != NULL);
img1 = cvLoadImage("r.jpg", 1);
cvShowImage("camera_left", img0);
waitKey(22);
cvShowImage("camera_right", img1);
waitKey(22);
assert(img1 != NULL);
if (!img0 || !img1)
{
cout << "error" << endl;
}
img_left = cvCloneImage(img0);
img_right = cvCloneImage(img1);
img_left_Change = cvCloneImage(img0);
img_right_Change = cvCloneImage(img1);
cvRemap(img_left, img_left_Change, Left_Mapx, Left_Mapy);
cvRemap(img_right, img_right_Change, Right_Mapx, Right_Mapy);
cvSave("img_left_Change.jpg", img_left_Change);
cvSave("img_right_Change.jpg", img_right_Change);
cvLine(img_left_Change, cvPoint(0, 96), cvPoint(1280 - 1, 96), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 2), cvPoint(1280 - 1, 96 * 2), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 3), cvPoint(1280 - 1, 96 * 3), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 4), cvPoint(1280 - 1, 96 * 4), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 5), cvPoint(1280 - 1, 96 * 5), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 6), cvPoint(1280 - 1, 96 * 6), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 7), cvPoint(1280 - 1, 96 * 7), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 8), cvPoint(1280 - 1, 96 * 8), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0, 96 * 9), cvPoint(1280 - 1, 96 * 9), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96), cvPoint(1280 - 1, 96), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 2), cvPoint(1280 - 1, 96 * 2), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 3), cvPoint(1280 - 1, 96 * 3), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 4), cvPoint(1280 - 1, 96 * 4), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 5), cvPoint(1280 - 1, 96 * 5), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 6), cvPoint(1280 - 1, 96 * 6), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 7), cvPoint(1280 - 1, 96 * 7), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 8), cvPoint(1280 - 1, 96 * 8), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0, 96 * 9), cvPoint(1280 - 1, 96 * 9), cvScalar(255, 0, 0));
cvShowImage("camera_left_Change", img_left_Change);
waitKey(22);
cvShowImage("camera_right_Change", img_right_Change);
waitKey(22);
//char c = cvWaitKey(33);
cvReleaseImage(&img_left);
cvReleaseImage(&img_right);
cvReleaseImage(&img_left_Change);
cvReleaseImage(&img_right_Change);
return 0;
}