在VC中如何通过opencv获取相机到相片的距离. 如题,用数码相机摄了一张相片,相片中有六个圆,现要想通过opencv取得相机距物体(六个圆)的距离,我在最后一步求距离时用cvCalibrateCamera2函数时出问题了,请各位高手指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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()函数出问题了,麻烦帮帮 出了什么问题,编译问题?我觉得(CvMat *)1这个参数应该有点问题吧 不是编译问题,是在运行到num0()函数时出了一个对话框,有三个按钮供选择,分别是终止、重试、忽略。 我的工程在56481096群中,随便加,请好心人下载帮我看看,两个文件一起下,解压后将BIN目录放在Release目录下即可编译。 你对CvMat的用法是不对的,最好是看看它里面的例子再写程序吧 一个即将大四的,为啥找不到合适的实习的地方?能推荐点吗? pop3 协议删除邮件问题 看不懂VC++技术内幕上的一个画图例子 字符串指针问题 怎样才能看到MFC系统函数如GetAsSystemTime的源代码,我用F12键只能看到它们的函数原型。 VC中如何把整数和float类型的变量转化成字符串型? 急!在线等!如何得到动态创建的控件的ID? 求改变CTreeCtrl控件Item文本颜色的例子,在线等候~~~ 怎样改变listbox的背景颜色 关于对话框中空件的TabOrder动态修改 有没有办法,在显示BMP图片时,按钮还是可见 MFC AVI控件播放时遇到奇怪的问题
{
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()函数出问题了,麻烦帮帮
我觉得(CvMat *)1这个参数应该有点问题吧