双目视觉中的立体校正0xC0000005: 写入位置 0x001C0FFC 时发生访问冲突。

pcb9382 2017-03-30 03:43:46
新手一枚请大神分析一下,谢谢!下面是代码
#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;

}
...全文
517 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2018-04-04
  • 打赏
  • 举报
回复
这个问题一般都是野指针啊,崩溃的是时候有堆栈信息,看一下是哪一行代码的问题,然后再研究一下,上来就么多代码很难发现问题
kirritocch 2018-04-03
  • 打赏
  • 举报
回复
兄弟,删除opencv把
赵4老师 2017-03-30
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧