视差图中重建三维点云程序错误

qq_41247319 2018-02-07 12:03:01
我使用 http://blog.csdn.net/u014283958/article/details/52673304 中的源代码和图像,在win10 opencv3.4+openNI2+PCL1.8.1上运行,但是出现了很多错误,都出现在头文件中
类似
“后面有"::"的名称一定是类名或命名空间名”、
“应输入;”、
“此声明没有储存类或类型说明符”等有关类型变量的错误。
想问问各位怎么解决。
这是源码:
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;
using namespace pcl;

int user_data;
//相机内参,根据输入改动
const double u0 = 1329.49 / 4;//由于后面resize成原图的1/4所以有些参数要缩小相同倍数
const double v0 = 954.485 / 4;
const double fx = 6872.874 / 4;
const double fy = 6872.874 / 4;
const double Tx = 174.724;
const double doffs = 293.97 / 4;

void viewerOneOff(visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(0.0, 0.0, 0.0);
}

int main()
{
PointCloud<PointXYZRGB> cloud_a;
PointCloud<PointXYZRGB>::Ptr cloud(new PointCloud<PointXYZRGB>);



Mat color1 = imread("im0.png");
Mat depth = imread("Sword1_perfect_d.png");
////Resize
//color1.resize();
Mat color;
resize(color1, color, Size(color1.cols/4,color1.rows/4), 0, 0, CV_INTER_LINEAR);
//imshow("h",color);
//waitKey(0);

int rowNumber = color.rows;
int colNumber = color.cols;

cloud_a.height = rowNumber;
cloud_a.width = colNumber;
cloud_a.points.resize(cloud_a.width * cloud_a.height);

for (unsigned int u = 0; u < rowNumber; ++u)
{
for (unsigned int v = 0; v < colNumber; ++v)
{
/*unsigned int num = rowNumber*colNumber-(u*colNumber + v)-1;*/
unsigned int num = u*colNumber + v;
double Xw = 0, Yw = 0, Zw = 0;


Zw = fx*Tx / (((double)depth.at<Vec3b>(u, v)[0]) + doffs);
Xw = (v+1 - u0) * Zw / fx;
Yw = (u+1 - v0) * Zw / fy;

cloud_a.points[num].b = color.at<Vec3b>(u, v)[0];
cloud_a.points[num].g = color.at<Vec3b>(u, v)[1];
cloud_a.points[num].r = color.at<Vec3b>(u, v)[2];

cloud_a.points[num].x = Xw;
cloud_a.points[num].y = Yw;
cloud_a.points[num].z = Zw;
}
}

*cloud = cloud_a;

visualization::CloudViewer viewer("Cloud Viewer");

viewer.showCloud(cloud);

viewer.runOnVisualizationThreadOnce(viewerOneOff);

while (!viewer.wasStopped())
{
user_data = 9;
}

return 0;
}



这是出现的错误,还请各位指教。
...全文
724 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
berlinpand 2018-03-20
  • 打赏
  • 举报
回复
版本不对,可能是opencv版本号过高了
赵4老师 2018-02-07
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。 微调头文件的顺序。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧