如题,用数码相机摄了一张相片,相片中有六个圆,现要想通过opencv取得相机距物体(六个圆)的距离,我在最后一步求距离时用cvCalibrateCamera2函数时出问题了,请各位高手指教.

解决方案 »

  1.   

    void CDigitRegDlg::num0()//计算结果
    {  
    int i,j;
    const double world[6][3] = {{0,0,0},{16.0,0.6,0.0},{29.8,1.8,0.0},{-1.5,-13.2,0.0},{14.0,-14.2,0.0},{28.8,-15.0,0.0}};
        cvCalibrateCamera2( (CvMat *)world, (CvMat *)obj, (CvMat *)1, cvSize(2560,1920), 
    (CvMat *)obj2, (CvMat *)obj3, (CvMat *)obj4, (CvMat *)obj5, 0);//计算系数矩阵参数
    for (i = 0;i <= 2;i++)
    {
    for (j = 0;j <= 2;j++)
    {
    mi[i][j] = obj4[i][j];
    }
    }
    mi[0][3] = obj5[0][0];
    mi[0][4] = 0.0;
        mi[1][3] = obj5[1][0];
    mi[1][4] = 0.0;
    mi[2][3] = obj5[2][0];
    mi[2][4] = 0.0;
    mi[3][0] = mi[3][1] = mi[3][2] = 0.0;
    mi[3][3] = 1.0;
    mi[3][4] = 1.0;
        trade[0] = re[0][0];
    trade[1] = re[1][0];
    trade[2] = re[2][0];
    trade[3] = 1;
    line_equations( mi,trade,4);
        num = sqrt(re[0][0]*re[0][0]+re[1][0]*re[1][0]+re[2][0]*re[2][0]);//计算结果的表达式
    m_dis = num;
    this -> UpdateData(FALSE);
    }
    void CDigitRegDlg::OnDis() //显示最后结果
    {
    if(!isOK()) 
    {
    AfxMessageBox("未采集完");
    return;
    }
        num0();
    }
    我的num0()函数出问题了,麻烦帮帮
      

  2.   

    出了什么问题,编译问题?
    我觉得(CvMat *)1这个参数应该有点问题吧
      

  3.   

    不是编译问题,是在运行到num0()函数时出了一个对话框,有三个按钮供选择,分别是终止、重试、忽略。
      

  4.   

    我的工程在56481096群中,随便加,请好心人下载帮我看看,两个文件一起下,解压后将BIN目录放在Release目录下即可编译。
      

  5.   

    你对CvMat的用法是不对的,最好是看看它里面的例子再写程序吧