我试图让几个点的三维坐标空间,但我得到来自两个奇怪的结果undistortPoints()和triangulatePoints().
由于这两款相机有不同的分辨率,我已经分别校准他们,得到的均方根误差0,34和0,43,然后用stereoCalibrate()获得更多的矩阵,得到的RMS 0,708,然后用stereoRectify()获得的剩余矩阵.有了这个,我已经开始了收集坐标的工作,但我得到了奇怪的结果.
例如,输入是:(935, 262),undistortPoints()输出是(1228.709125, 342.79841)一个点,而另一个是(934, 176)和(1227.9016, 292.4686).这很奇怪,因为这两个点都非常接近框架的中间,其中扭曲是最小的.我没想到它会将它们移动300像素.
传递给traingulatePoints()结果时,结果甚至更奇怪 - 我测量了现实生活中三点之间的距离(用尺子),并计算了每张图片上像素之间的距离.因为这次点在一个非常平坦的平面上,这两个长度(像素和实际)匹配,如| AB |/| BC | 两种情况都是4/9左右.但是,triangulatePoints()通过| AB |/| BC |给我带来了结果 是3/2或4/2.
这是我的代码:
double pointsBok[2] = { bokList[j].toFloat()+xBok/2, bokList[j+1].toFloat()+yBok/2 };
cv::Mat imgPointsBokProper = cv::Mat(1,1, CV_64FC2, pointsBok);
double pointsTyl[2] = { tylList[j].toFloat()+xTyl/2, tylList[j+1].toFloat()+yTyl/2 };
//cv::Mat imgPointsTyl = cv::Mat(2,1, CV_64FC1, pointsTyl);
cv::Mat imgPointsTylProper = cv::Mat(1,1, CV_64FC2, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,其中几乎所有的UI元素都是动态创建的......其中包括从用户输入的数字生成的QLineEdit+ QPushButton对列表.按钮打开一个Dialog窗口来查找文件,QLineEdits用于数据验证/编辑,所有这些都必须在数据库中结束.有时他只需输入3个值,有时10个.
QLineEdit* warstwaEdit[iloscWarstw]; //iloscWarstw - number user inputs
QPushButton* warstwaDialog[iloscWarstw];
for(int i=0; i<iloscWarstw; i++) {
warstwaEdit[i] = new QLineEdit;
warstwaEdit[i]->setFixedHeight(25);
warstwaEdit[i]->setFixedWidth(400);
ui->scrollAreaWidgetContentsFormularzWarstw->layout()->addWidget(warstwaEdit[i]);
warstwaDialog[i] = new QPushButton;
warstwaDialog[i]->setFixedWidth(100);
warstwaDialog[i]->setFixedHeight(30);
warstwaDialog[i]->setText("Dodaj element");
ui->scrollAreaWidgetContentsFormularzWarstw->layout()->addWidget(warstwaDialog[i]);
mapperDialog->setMapping(warstwaDialog[i], i);
connect(warstwaDialog[i], SIGNAL(clicked()), mapperDialog, SLOT(map()));
}
Run Code Online (Sandbox Code Playgroud)
但我无法让Dialog将String传递给"他的"标签.在Dialog的插槽中,我正在尝试使用
ui->scrollAreaWidgetContentsFormularzWarstw->layout()->warstwaEdit[i]->setText(filepath);
Run Code Online (Sandbox Code Playgroud)
但显然QLayout ()(也scrollAreaWidgetContentsFormularzWarstw)有一个成员"warstwaEdit".qDebug()在该槽中使用表示i正在传递正确的.TreeDump表示ScrollAreaWidgetContentsFormularzWarstw是父级.
我有点不知所措.我第一次遇到Qt时得到了一个非常奇怪的应用......
我有一个gui表单,其中存在多个文本框.我想将它们的值放在数组中.一种方法是通过写这样的东西
{array element } = ui->text_1->text();
Run Code Online (Sandbox Code Playgroud)
并将其重复为text_2,text_3至n.
我想要的是运行一个循环并在每个循环中替换文本框名称的数字部分.
这样的事情 {array element } = ui->text_{This number getting changed }->text();
如何在qt中完成?
我所拥有的这两个调用是另一个线程中另一个对象中的方法。
QMetaObject::invokeMethod(object, "method", Qt::variousOptionalParameters,
Q_ARG(int, a), Q_ARG(int, b), Q_ARG(float, c), Q_ARG(QString, d));
Run Code Online (Sandbox Code Playgroud)
和
object->method(a, b, c, d);
Run Code Online (Sandbox Code Playgroud)
它们执行完全相同的操作(在这种情况下,至少是在其中更新一些GUI元素以及OpenCV线程感兴趣的区域)。两者有什么区别?