- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 zed 立体相机创建点云。因此,我编写了一些简单的代码,并使用 opencv 模块之一 viz 将其可视化。但是xyz好像出来的不错,但是没有结果。有什么问题?
{
double baseLine = 120.0;
double covergence = 0.00285;
double FX = 700;
double FY = 700;
double CX = 320;
double CY = 240;
double K1 = -0.15;
double K2 = 0.0;
double P1 = 0.0;
double P2 = 0.0;
cv::Matx33d K = cv::Matx33d(FX, 0, CX, 0, FY, CY, 0, 0, 1);
cv::Matx41d distCoeffs = cv::Matx41d(K1, K2, P1, P2);
cv::Matx44d Q = cv::Matx44d(
1.0, 0.0, 0.0, -CX,
0.0, 1.0, 0.0, -CY,
0.0, 0.0, 0.0, FX,
0.0, 0.0, -1.0 / baseLine, (CX - CX) / baseLine
);
//// SGBM
cv::Ptr<cv::StereoSGBM> sgbm = cv::StereoSGBM::create(0, 16 * 5, 9);
// param
int sgbmWinSize = 3;
int numberOfDisparities = 16 * 6;
int cn = 3;
// filter
cv::Ptr<cv::ximgproc::DisparityWLSFilter> wls_filter;
wls_filter = cv::ximgproc::createDisparityWLSFilter(sgbm);
cv::Ptr<cv::StereoMatcher> sm = cv::ximgproc::createRightMatcher(sgbm);
// param
double lambda = 8000.0;
double sigma = 1.5;
double vis_multi = 1.0;
// init
sgbm->setPreFilterCap(63);
sgbm->setBlockSize(sgbmWinSize);
sgbm->setP1(8 * cn*sgbmWinSize*sgbmWinSize);
sgbm->setP2(32 * cn*sgbmWinSize*sgbmWinSize);
sgbm->setMode(cv::StereoSGBM::MODE_SGBM_3WAY);
//// viz
cv::viz::Viz3d window("Coordinate Frame");
window.showWidget("Coordinate Widget", cv::viz::WCoordinateSystem());
//main loop
while (!window.wasStopped())
{
cv::Mat tmpImg;
cap.read(tmpImg);
leftImg = tmpImg(cv::Rect(0, 0, tmpImg.cols / 2, tmpImg.rows));
rightImg = tmpImg(cv::Rect(tmpImg.cols / 2, 0, tmpImg.cols / 2, tmpImg.rows));
cv::Mat tmp1 = leftImg.clone();
cv::Mat tmp2 = rightImg.clone();
sgbm->compute(tmp1, tmp2, disparity16S);
sm->compute(tmp2, tmp1, img16Sr);
cv::Mat showDisparity;
disparity16S.convertTo(showDisparity, CV_8UC1, 255 / (numberOfDisparities*16.));
printf("disparity16S: %s %d x %d\n", type2str(disparity16S.type()).c_str(), disparity16S.rows, disparity16S.cols);
cv::imshow("disparity", showDisparity);
wls_filter->setLambda(lambda);
wls_filter->setSigmaColor(sigma);
wls_filter->filter(disparity16S, tmp1, filteredDisparity, img16Sr);
cv::Mat showFilteredDisparity;
filteredDisparity.convertTo(showFilteredDisparity, CV_8U, 255 / (numberOfDisparities*16.));
printf("filteredDisparity: %s %d x %d\n", type2str(filteredDisparity.type()).c_str(), filteredDisparity.rows, filteredDisparity.cols);
cv::imshow("Filtered Disparity", showFilteredDisparity);
cv::Mat xyz, xyzt;
// output : 3-channel floating-point image of the same size as disparity
cv::reprojectImageTo3D(filteredDisparity, xyz, Q, true);
printf("xyz: %s %d x %d\n", type2str(xyz.type()).c_str(), xyz.rows, xyz.cols);
cv::Mat showXYZ;
xyz.convertTo(showXYZ, CV_8UC3, 255 / (numberOfDisparities*8.));
cv::imshow("XYZ", showXYZ);
viz::WCloud cw(xyz, viz::Color::white());
cw.setRenderingProperty(cv::viz::POINT_SIZE, 2);
window.showWidget("Cloud Widget", cw);
window.spinOnce(30, true);
}
//
}
最佳答案
我知道我在很长一段时间后才回答,让这对遇到这个问题的人有用。
您已使用 OpenCV 的 reprojectTo3D() 函数获取 3D 点并且已处理缺失值。当您使用可视化项显示时,无穷大和 NaN 等值会导致问题。因此,您只需过滤掉无穷大值和 NaN 值。
我使用 OpenCV 的 forEach 函数来过滤这些值
xyz.forEach<Vec3f>(
[](Vec3f& val, const int *pos)
{
if(isnan(val[0]) || isinf(val[0]))
val = Vec3f();
});
关于c++ - 在opencv中使用viz的立体相机点云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437913/
我有引用 PHP 下拉列表 (s1) 的 JavaScript 代码: var dropdown = d3.select("#s1") var change = function() { var so
我在这台机器上没有 Graphviz,并且不想安装它,因此首选终端作为替代方案会很好。 bundler v1.1.5 最佳答案 Gemfile.lock 显示依赖关系: view Gemfile.lo
我们正在使用 Tableau API 嵌入两个工作簿。每个工作簿都嵌入在一个 iframe 中。问题是,当我们从一个工作簿转到另一个工作簿时,我们收到错误“tableau-2.0.0.min.js:1
这是对 Altair: Sorting faceted “text” chart not reflecting expectation 的跟进查询.我用一列额外的列修改了数据框。我的目标是对“标记”列
这里我有谷歌可视化数据表: 所以我有这个代码: function drawTroskovnik() { // Create and populate the data table. var J
当我尝试在 IE9 中使用 viz.js 时,出现以下错误。 引用错误:“Viz”未定义 有什么想法吗? 最佳答案 Vis.js 似乎无法在 IE9 中运行。我测试了示例页面 http://mdain
我正在努力学习本教程 here .当我运行代码时,我得到了 "g++ -std=c++11 d.cpp -o d `pkg-config --cflags --libs opencv` d.cpp:2
我在 Tableau public 上发布了一个 Tableau 9.3 可视化: https://public.tableau.com/profile/michel.page#!/vizhome/e
我试图显示来自 SAPUI5 的 VIZ 图表,但无法绑定(bind)从模型接收的数据。它会抛出[50017] - 无效数据绑定(bind)错误。我在下面发布了我的代码,请查看它并帮助我找到原因。 v
我看到可以有 an event handler for mouse click in viz , 但不是 Widget 的等价物. 有没有什么方法可以使用 viz::MouseEvent() 返回的
我有一个类似的数据结构 [ {"name":"foo", "links":["a", "b", "c"]}, {"name":"bar", "links":["d", "e", "f"
我试图在服务器上从 Java 8(Nashorn 引擎)渲染 graphviz,但出现错误: Exception in thread "main" javax.script.ScriptExcepti
我正在使用 OpenCV Viz 和 ARUCO 开发一个简单的基于标记的增强现实应用程序。我只想在标记上可视化 3D 对象(PLY 格式)。 我可以毫无问题地使用 ARUCO 运行标记检测和姿态估计
我需要使用 graph-viz 在大图中找到最小生成树。节点数和边信息将在另一个文本文件中的 2 列“源”和“目标”中给出。请帮忙。 最佳答案 Graphviz 主要是一种布局图形的工具。包含的算法与
我在 Viz.js 中有以下 DOT 代码: digraph G { node [fontname = "font-awesome"]; 17 [id=17, shape="hexagon", lab
我的 C++ 源代码: int main(){ if( argc != 2) { cout <<" Usage: display_image ImageToLoadAndDi
我已经使用 qtcreator 运行了我的 opencv 代码,当我尝试使用 Viz 库时得到了这个答案。 代码: #include #include #include #include #i
我是一名优秀的程序员,十分优秀!