opencv相机标定立体校正一直报错
opencv吧
全部回复
仅看楼主
level 2
断海洋 楼主
cvStereoRectify(Intrinsics_Camera_Left, Intrinsics_Camera_Right,
Distortion_Camera_Left, Distortion_Camera_Right,
cvSize(640, 480), R_opencv, Translation_matlab,
R1, R2, P1, P2,0,1024,-1);//增加图像缩放,去除死区
一直显示R1,R2,P1,P2出出错
2017年06月16日 04点06分 1
level 2
断海洋 楼主
//这是我整个代码
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/core/core.hpp>
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <time.h>
#include <iostream>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
FileStorage fs2("test.xml", FileStorage::READ);
//读入左右摄像机的内外参数,以及R和T;
Mat Intrinsics_Camera_Left1 = cvCreateMat(3, 3, CV_64F);
Mat Intrinsics_Camera_Right1= cvCreateMat(3, 3, CV_64F);
Mat Distortion_Camera_Left1=cvCreateMat(1, 5, CV_64F);
Mat Distortion_Camera_Right1=cvCreateMat(1, 5, CV_64F);
Mat Translation_matlab1=cvCreateMat(1, 3, CV_64F);
Mat RotRodrigues_matlab1=cvCreateMat(1, 3, CV_64F);
fs2["Intrinsics_Camera_Left"] >> Intrinsics_Camera_Left1;
fs2["Intrinsics_Camera_Right"] >> Intrinsics_Camera_Right1;
fs2["Distortion_Camera_Left"] >> Distortion_Camera_Left1;
fs2["Distortion_Camera_Right"] >> Distortion_Camera_Right1;
fs2["RotRodrigues"] >> RotRodrigues_matlab1;
fs2["Translation"] >> Translation_matlab1;
CvMat *Intrinsics_Camera_Left = cvCreateMat(3, 3, CV_64F);
CvMat *Intrinsics_Camera_Right=cvCreateMat(3, 3, CV_64F);
CvMat *Distortion_Camera_Left =cvCreateMat(1, 5, CV_64F);
CvMat *Distortion_Camera_Right=cvCreateMat(1,5, CV_64F);
CvMat *Translation_matlab=cvCreateMat(1, 3, CV_64F);
CvMat *RotRodrigues_matlab=cvCreateMat(1, 3, CV_64F);
//Mat类型转为CvMat类型
CvMat a = Intrinsics_Camera_Left1;
CvMat b = Intrinsics_Camera_Right1;
CvMat c =Distortion_Camera_Left1;
CvMat d = Distortion_Camera_Right1;
CvMat e = Translation_matlab1;
CvMat f = RotRodrigues_matlab1;
cvCopy(&a, Intrinsics_Camera_Left);
cvCopy(&b, Intrinsics_Camera_Right);
cvCopy(&c, Distortion_Camera_Left);
cvCopy(&d, Distortion_Camera_Right);
cvCopy(&e, Translation_matlab);
cvCopy(&f, RotRodrigues_matlab);
/*CvMat *Intrinsics_Camera_Left = (CvMat *)cvLoad("Intrinsics_Camera_Left.xml");
CvMat *Intrinsics_Camera_Right = (CvMat *)cvLoad("Intrinsics_Camera_Right.xml");
CvMat *Distortion_Camera_Left = (CvMat *)cvLoad("Distortion_Camera_Left.xml");
CvMat *Distortion_Camera_Right = (CvMat *)cvLoad("Distortion_Camera_Right.xml");
CvMat *Translation_matlab = (CvMat *)cvLoad("Translation.xml");
CvMat *RotRodrigues_matlab = (CvMat *)cvLoad("RotRodrigues.xml");*/
CvMat *R_opencv = cvCreateMat(3, 3, CV_64F);
cvRodrigues2(RotRodrigues_matlab, R_opencv,NULL);
//创建映射阵
IplImage *Left_Mapx = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 1);
IplImage *Left_Mapy = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 1);
IplImage *Right_Mapx = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 1);
IplImage *Right_Mapy = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 1);
CvMat *R1 = cvCreateMat(3, 3, CV_64F);
CvMat *R2 = cvCreateMat(3, 3, CV_64F);
CvMat *P1 = cvCreateMat(3, 4, CV_64F);
CvMat *P2 = cvCreateMat(3, 4, CV_64F);
//立体校正
cvStereoRectify(Intrinsics_Camera_Left, Intrinsics_Camera_Right,
Distortion_Camera_Left, Distortion_Camera_Right,
cvSize(640, 480), R_opencv, Translation_matlab,
R1, R2, P1, P2,0,1024,-1);//增加图像缩放,去除死区
cvInitUndistortRectifyMap(Intrinsics_Camera_Left, Distortion_Camera_Left, R1, P1,
Left_Mapx, Left_Mapy);
cvInitUndistortRectifyMap(Intrinsics_Camera_Right, Distortion_Camera_Right, R2, P2,
Right_Mapx, Right_Mapy);
IplImage *img0, *img1;
IplImage *img_left, *img_right;
IplImage *img_left_Change, *img_right_Change;
cvNamedWindow("camera_left");
cvNamedWindow("camera_right");
cvNamedWindow("camera_left_Change");
cvNamedWindow("camera_right_Change");
img0 = cvLoadImage("Img0.bmp",1);
//assert(img0 != NULL);
img1 = cvLoadImage("Img1.bmp",1);
cvShowImage("camera_left", img0);
waitKey();
cvShowImage("camera_right", img1);
waitKey();
//assert(img1 != NULL);
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,48), cvPoint(640-1, 48), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*2), cvPoint(640-1, 48*2), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*3), cvPoint(640-1, 48*3), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*4), cvPoint(640-1, 48*4), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*5), cvPoint(640-1, 48*5), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*6), cvPoint(640-1, 48*6), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*7), cvPoint(640-1, 48*7), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*8), cvPoint(640-1, 48*8), cvScalar(255, 0, 0));
cvLine(img_left_Change, cvPoint(0,48*9), cvPoint(640-1, 48*9), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48), cvPoint(640-1, 48), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*2), cvPoint(640-1, 48*2), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*3), cvPoint(640-1, 48*3), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*4), cvPoint(640-1, 48*4), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*5), cvPoint(640-1, 48*5), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*6), cvPoint(640-1, 48*6), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*7), cvPoint(640-1, 48*7), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*8), cvPoint(640-1, 48*8), cvScalar(255, 0, 0));
cvLine(img_right_Change, cvPoint(0,48*9), cvPoint(640-1, 48*9), cvScalar(255, 0, 0));
cvShowImage("camera_left_Change", img_left_Change);
waitKey();
cvShowImage("camera_right_Change", img_right_Change);
waitKey();
//char c = cvWaitKey(33);
cvReleaseImage(&img_left);
cvReleaseImage(&img_right);
cvReleaseImage(&img_left_Change);
cvReleaseImage(&img_right_Change);
return 0;
}
2017年06月16日 04点06分 2
1