2016-06-05 1 views
0

어떻게 오류를 해결할 수 있습니까?"CvTermCriteria"에서 "int"로의 적절한 변환 기능이 없습니다.

OpenCV 2.x 용으로 만든 프로그램을 사용했지만 OpenCV 3.0에서 컴파일하고 오류가 발생했습니다. CvTermCriteria를 TermCriteria :: TermCriteria로 변경했지만 작동하지 않습니다. CvTermCriteria를 int로 변경하려면 어떻게해야합니까?

누구든지 나를 도울 수 있기를 바랍니다.

//--------------Compute for calibration------------------- 
    N = n_boards*n; 
    objectPoints.resize(N); 
    for(i = 0; i < ny; i++) 
     for(j = 0; j < nx; j++) objectPoints[i*nx + j] = cvPoint3D32f(i*squareSize, j*squareSize, 0); 
    for(i = 1; i < n_boards; i++) copy(objectPoints.begin(), objectPoints.begin() + n, objectPoints.begin() + i*n); 
    npoints.resize(n_boards,n); 

    CvMat _objectPoints = cvMat(1, N, CV_32FC3, &objectPoints[0]); 
    CvMat _imagePoints1 = cvMat(1, N, CV_32FC2, &points[0][0]); 
    CvMat _imagePoints2 = cvMat(1, N, CV_32FC2, &points[1][0]); 
    CvMat _npoints = cvMat(1, npoints.size(), CV_32S, &npoints[0]); 
    cvSetIdentity(&_M1calib); 
    cvSetIdentity(&_M2calib); 
    cvZero(&_D1); 
    cvZero(&_D2); 

    printf("\nRunning stereo calibration ..."); 
    fflush(stdout); 
    cvStereoCalibrate(&_objectPoints, &_imagePoints1, &_imagePoints2, &_npoints,&_M1calib, &_D1, &_M2calib, &_D2,imageSize, &_R, &_Tcalib, &_E, &_F, 
    cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, 1e-5), 
    CV_CALIB_FIX_ASPECT_RATIO+CV_CALIB_ZERO_TANGENT_DIST + CV_CALIB_SAME_FOCAL_LENGTH); 


    printf("\nDone Calibration"); 

    cvUndistortPoints(&_imagePoints1, &_imagePoints1,&_M1calib, &_D1, 0, &_M1calib); 
    cvUndistortPoints(&_imagePoints2, &_imagePoints2,&_M2calib, &_D2, 0, &_M2calib); 


    CvMat* mx1calib = cvCreateMat(imageSize.height,imageSize.width, CV_32F); 
    CvMat* my1calib = cvCreateMat(imageSize.height,imageSize.width, CV_32F); 
    CvMat* mx2calib = cvCreateMat(imageSize.height,imageSize.width, CV_32F); 
    CvMat* my2calib = cvCreateMat(imageSize.height,imageSize.width, CV_32F); 

    double R1[3][3], R2[3][3], P1[3][4], P2[3][4]; 
    CvMat _R1 = cvMat(3, 3, CV_64F, R1); 
    CvMat _R2 = cvMat(3, 3, CV_64F, R2); 

     CvMat _P1 = cvMat(3, 4, CV_64F, P1); 
     CvMat _P2 = cvMat(3, 4, CV_64F, P2); 
     cvStereoRectify(&_M1calib, &_M2calib, &_D1, &_D2, imageSize,&_R, &_Tcalib,&_R1, &_R2, &_P1, &_P2, &_Qcalib,0/*CV_CALIB_ZERO_DISPARITY*/); 

     cvInitUndistortRectifyMap(&_M1calib,&_D1,&_R1,&_P1,mx1calib,my1calib); 
     cvInitUndistortRectifyMap(&_M2calib,&_D2,&_R2,&_P2,mx2calib,my2calib); 

     printf("\nSaving matries for later use ...\n"); 
     cvSave("CalibFile//M1.yml",&_M1calib); 
    // cvSave("CalibFile//D1.yml",&_D1); 
    // cvSave("CalibFile//R1.yml",&_R1); 
    // cvSave("CalibFile//P1.yml",&_P1); 

     cvSave("CalibFile//M2.yml",&_M2calib); 
    // cvSave("CalibFile//D2.yml",&_D2); 
    // cvSave("CalibFile//R2.yml",&_R2); 
    // cvSave("CalibFile//P2.yml",&_P2); 

     cvSave("CalibFile//Q.yml",&_Qcalib); 
     cvSave("CalibFile//T.yml",&_Tcalib); 
     cvSave("CalibFile//mx1.yml",mx1calib); 
     cvSave("CalibFile//my1.yml",my1calib); 
     cvSave("CalibFile//mx2.yml",mx2calib); 
     cvSave("CalibFile//my2.yml",my2calib); 
+1

코드를 표시하십시오 .... [mcve] 수행 방법보기 – Miki

답변

0

스왑을 OpenCV에서 stereoCalibrate


> = 3.0의 마지막 두 개의 매개 변수 :

cvStereoCalibrate(&_objectPoints, &_imagePoints1, &_imagePoints2, &_npoints,&_M1calib, &_D1, &_M2calib, &_D2,imageSize, &_R, &_Tcalib, &_E, &_F, 
    cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, 1e-5), 
    CV_CALIB_FIX_ASPECT_RATIO+CV_CALIB_ZERO_TANGENT_DIST + CV_CALIB_SAME_FOCAL_LENGTH); 

이 소스 코드는 다음과 같습니다 감사

오류는이 부분에 나타났다 , stereoCalibrate의 서명이 변경되었으며 에 sim이 필요합니다. 마지막 두 매개 변수, flagscriteria을 교환하십시오.

폐기 C 버전을 OpenCV < 3.0

C : 더블 cvStereoCalibrate (CONST CvMat * object_points, CONST CvMat * image_points1, CONST CvMat * image_points2, CONST CvMat *는 nPoints, CvMat * camera_matrix1, CvMat * CvMat * T, CvMat * E = 0, CvMat * F = 0, CvTermCriteria term_crit = cvTermCriteria (CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 30,1e-6), int 플래그 = CV_CALIB_FIX_INTRINSIC)

C++ 버전, OpenCV < 3.0

C++ : 더블 stereoCalibrate (InputArrayOfArrays의 objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, 크기 imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, TermCriteria 기준 = TermCriteria (TermCriteria :: COUNT + TermCriteria :: EPS, 30, 1e-6), int flags = CALIB_FIX_INTRINSIC)

C++ 버전, OpenCV> = 30

더블 이력서 :: stereoCalibrate (InputArrayOfArrays의 objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, 크기 imageSize, OutputArray R, OutputArray T , OutputArray E, OutputArray F, int flags = CALIB_FIX_INTRINSIC, TermCriteria criteria = TermCriteria (TermCriteria :: COUNT + TermCriter IA : EPS, 30, 1E-6) )


귀하의 코드가 되지 않는입니다 C API를 사용하고 있습니다. 정말로 C++ API를 사용하는 것을 고려해야합니다.

+0

그래도 작동하지만 다른 오류가 발생했습니다. 머리글에 문제가 있다고 생각합니다. 오류 : –

+0

오류 LNK2019 : 해결되지 않은 외부 기호 "public : void __thiscall CBlobResult :: Filter (클래스 CBlobResult & int, 클래스 COperadorBlob *, int, double, double)"필터 @ CBlobResult @@ QAEXAAV1 @ HPAVCOperadorBlob @ (공백) __thiscall StereoFunctions :: stereoDetect (void) "(? stereoDetect @ StereoFunctions @@ QAEXXZ) –

+0

이 다른 오류는 질문과 관련이 없습니다. 따라서 새로운 질문을하십시오. 그것에 대해. 내 대답이이 질문에 언급 된 문제를 해결하면 답변을 수락하십시오. – Miki

관련 문제