- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Xtion Pro 和 DS325 深度相机上运行以下代码会得到截然不同的结果。 Xtion Pro 完美地显示了彩色点云和 RGB,而 DS325 在图像中有许多黑色模糊区域,使其无法用于我想要的 OpenCV 功能(转换为 Mat 形式后)。
此链接似乎是在 XYZ 数据被捕获为 NaN 时出现的。例如,即使指向窗口(这使得大部分 XYZ 数据为 NaN),Xtion Pro 也能很好地显示完整的 RGB,而对 DS325 执行相同操作会使几乎整个 RGB 图像显示为黑色。
有人能告诉我这是否只是新抓取器代码中的一个缺陷?或者更内在地与不同硬件的映射差异有关?
运行 depthsense 查看器应用程序(来自 primesense SDK)确实向我确认了深度和完整 RGB 数据可以同时流式传输,所以有点困惑为什么 RGB 似乎被丢弃了。任何帮助将不胜感激!谢谢。
Windows、VS2013、PCL 1.8
#include <iostream>
#include <mutex>
#include <boost/thread/mutex.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/format.hpp>
#include <pcl/io/pcd_io.h>
#include <pcl/common/time.h>
#include <pcl/console/print.h>
#include <pcl/console/parse.h>
#include <pcl/io/io_exception.h>
#include <pcl/io/openni_grabber.h>
#include <pcl/io/depth_sense_grabber.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/image_viewer.h>
using namespace pcl::console;
typedef pcl::PointCloud<pcl::PointXYZRGBA> PointCloudT;
std::mutex cloud_mutex;
void cloud_cb_(const PointCloudT::ConstPtr& callback_cloud, PointCloudT::Ptr& new_cloud_,
bool* new_cloud_available_flag)
{
cloud_mutex.lock();
*new_cloud_ = *callback_cloud;
cloud_mutex.unlock();
*new_cloud_available_flag = true;
}
void PointXYZRGBAtoCharArray(pcl::PointCloud<pcl::PointXYZRGBA>::Ptr point_cloud_ptr, unsigned char * Image)
{
for (int i = 0; i < point_cloud_ptr->height; i++)
{
for (int j = 0; j < point_cloud_ptr->width; j++)
{
Image[(i * point_cloud_ptr->width + j) * 3] = point_cloud_ptr->points.at(i * point_cloud_ptr->width + j).r;
Image[(i * point_cloud_ptr->width + j) * 3 + 1] = point_cloud_ptr->points.at(i * point_cloud_ptr->width + j).g;
Image[(i * point_cloud_ptr->width + j) * 3 + 2] = point_cloud_ptr->points.at(i * point_cloud_ptr->width + j).b;
}
}
}
int main()
{
boost::mutex new_cloud_mutex_;
PointCloudT::Ptr cloud(new PointCloudT);
bool new_cloud_available_flag = false;
std::string device_id = "";
boost::function<void(const typename PointCloudT::ConstPtr&)> f = boost::bind(&cloud_cb_, _1, cloud, &new_cloud_available_flag);
boost::shared_ptr<pcl::Grabber> grabber;
try
{
grabber.reset(new pcl::OpenNIGrabber);
cout << "Using OpenNI Device" << endl;
}
catch (pcl::IOException& e)
{
grabber.reset(new pcl::DepthSenseGrabber);
cout << "Using DepthSense Device" << endl;
}
grabber->registerCallback(f);
grabber->start();
// Image Viewer
pcl::visualization::ImageViewer Imageviewer("Image Viewer");
unsigned char* Image = new unsigned char[3*cloud->height*cloud->width];
Imageviewer.addRGBImage(Image, cloud->width, cloud->height);
// Point Cloud Viewer:
pcl::visualization::PCLVisualizer viewer("PCL Viewer");
viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
for (;;)
{
if (new_cloud_available_flag)
{
new_cloud_available_flag = false;
cloud_mutex.lock();
// Update Image
Imageviewer.removeLayer("rgb_image");
PointXYZRGBAtoCharArray(cloud, Image);
Imageviewer.addRGBImage(Image,cloud->width,cloud->height);
Imageviewer.spinOnce();
// Update Point Cloud
viewer.removeAllPointClouds();
viewer.addPointCloud<pcl::PointXYZRGBA>(cloud);
cloud_mutex.unlock();
viewer.spinOnce();
}
}
grabber->stop();
最佳答案
DepthSense
采集器从驱动程序接收两个流:深度和颜色。它们被合并成一个带有颜色的点云,然后返回给最终用户。由于所涉及的两个传感器(红外和彩色相机)具有一定的位移和不同的分辨率(分别为 QVGA 和 VGA),因此流中深度和彩色像素之间的映射并不简单。事实上,对于每个深度/颜色帧,相机驱动程序额外生成所谓的 UV 映射,可用于建立对应关系。不幸的是,它无法为无效的深度像素设置 UV 坐标,这使得无法为 NaN 点找到对应的 RGB 值。
我建议直接使用 DepthSense SDK 访问原始 RGB 图像。
关于c++ - 点云库 1.8 - DepthSense Grabber 似乎没有为 NaN XYZ 点提供 RGB 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727575/
('xyz' != 'xyz') 和 NOT ('xyz' = 'xyz') 之间有什么区别吗? 虽然我在 Oracle DB 的上下文中询问,但也想知道其他语言的相同情况。 差异主要在于处理速度和所
我注意到定义了 simpleType 或 complexType,并且在模式文件中的多个元素的声明中使用了这些类型,simpleType 或 complexType 生成了一个方法签名作为“JAXBE
我在 XYZ 的 3D 空间中将对象旋转 90 度步长 (rX rY rZ)。角度限制为 0-360 度,我使用以下命令来旋转矩阵: Matrix.rotateM(mModelMatrix, 0, r
recursivePrint 函数将递归地显示文件和文件夹,我已经调用了一个函数来搜索文件中的单词此代码适用于小号。文件数但是当我使用所有目录时,它给出了内存不足错误java堆空间 File[] ma
我有一个简单的 html 网站,其中包含 50 多个 html 页面。从 statistics-script 中,我有时会在 xyz.html/(重定向到 404)而不是 xyz.html 之类的页面
我对一个位置(原始文件夹)中的所有文件进行哈希处理,然后将哈希值写入变量,然后对另一位置(目标文件夹)中的所有文件执行相同的操作: $origin = Get-ChildItem .\Test1 |
我正在编写一个包含键值对集合的重要类,在编译期间我收到一个我无法弄清楚的非常奇怪的错误。在一个与这里的函数非常相似的函数中,但由于所需代码的复杂性而没有上下文,我收到错误: TValue& opera
我正在尝试做一些非常简单的事情。 场景如下:我有一个整个网站与支持推送状态的浏览器配合得很好。该网站的工作基础是该语言是“实际页面”,例如: /en/whatever/etc = index.en.
在java脚本(或jquery)中,有什么区别 var a = xyz[] var a = xyz{} 我在互联网上搜索但找不到任何答案?如果有任何差异,请告诉我。 最佳答案 这是无效的语法。 var
我正在通过以下步骤在 Android 中进行 JSON 解析: 使用 HttpPost 对象从网络服务获取 XML 响应。 将此 XML 转换为 JSON 字符串,然后再转换为 JSON 对象。 现在
有什么区别: class A { public: void virtual method1() {...}; virtual void method2() {...}; }; 编译器(编辑:Apple
我正在尝试使用 configure、make、make install 三部曲来编译 c 源代码。 由于我想编译源代码,以便它们使用默认情况下未使用的另一个库 (XYZ),因此我可以使用 ./conf
在 MySQL 中,如何将表的列名从“sum(xyz)”更改为“xyz”?我已经尝试了以下解决方案来更改列名: Change Column Name in MySQL Rename column SQ
不能覆盖委托(delegate)函数, didFinishLaunchingWithOptions 和其他与应用程序委托(delegate)相关的函数都很好,但是当我尝试使用 application(
Tally-ho 小伙子们, 这个问题认为线性代数的艺术是数学中我无法解决的地方。所以我希望你们能帮助我 :D。 我正在尝试为一款名为《骑马与砍杀》的游戏创建单人自动踢球作弊。这个 autokicke
我正在 typescript 中访问导入的nodejs模块的函数,编译器会为每个方法调用或属性访问发出给定的错误。这是我的声明: import imageProc = module('imagePr
这个问题在这里已经有了答案: What is wrong with below code (3 个答案) What does sizeof(&array) return? (4 个答案) 关闭 9
为了好玩,我决定制作类似于 Markdown 的东西。根据我过去对正则表达式的一些小经验,我知道它们有多么强大,所以它们将是我所需要的。 所以,如果我有这个字符串: Hello **bold*
假设我有一个目录,里面有一堆网站名称。 即 dev.domain.com dev.domain2.com dev.domain3.com 如何将它们重命名为 .com在使用管道和/或重定向 bash
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: difference between string object and string literal 你好, 首先
我是一名优秀的程序员,十分优秀!