当我们有深度和rgb矩阵时,如何显示3D图像#39;OpenCV中的s(从Kinect捕获)
我们使用openni库的kinect捕获了一个3D图像,并使用此代码以OpenCV垫的形式获得了RGB和深度图像. main() { OpenNI::initialize(); puts( "Kinect initialization..." ); Device device; if ( device.open( openni::ANY_DEVICE ) != 0 ) { puts( "Kinect not found !" ); return -1; } puts( "Kinect opened" ); VideoStream depth, color; color.create( device, SENSOR_COLOR ); color.start(); puts( "Camera ok" ); depth.create( device,
4 2023-05-10
编程技术问答社区
cv::Mat和XnDepthPixel*之间的转换
我正在使用OpenNi 1.5.4.0和OpenCV 2.4.5,以及可视化目的的QT(仅RGB图像). 基本上,我正在从kinect中检索深度和RGB帧,然后使用转换将它们存储在硬盘驱动器上: /* Depth conversion */ cv::Mat depth = cv::Mat(2, sizes, CV_16UC1, (void*) pDepthMap); //XnDepthPixel *pDepthMap /* RGB conversion */ ///image is a QImage* , pImageMap is a XnUInt8* for(int i = 0; i
0 2023-05-10
编程技术问答社区
在多线程应用程序中使用opencv waitKey()。
我有一个用QT5.7和OpenNi编写的多线程应用程序.它具有启动第二个线程的主线程,该线程从.ONI录制文件(Asus Xtion Pro Live)捕获框架进行一些处理,并通过QT信号插槽机制将帧传递到主线程,并使用. 我要做的是实现一个暂停密钥,因此请按" P"处理暂停.我在想这样的事情: void Camera::run(){ while(!cameraStop && this->device.isValid()) { try { if (!buttonPause) { getFrame(); process(); emit sigFrameImageReady(frame); if (cv::waitKey(1)==112){ setButtonPause(!(getButtonPause()));
0 2023-05-10
编程技术问答社区
用OpenCV和OpenNI测量两点之间的距离
我正在使用OpenCV 2.4.0中的内置OpenNi访问,并且我正在尝试测量深度图中两个点之间的距离.我已经尝试过了: #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include using namespace cv; using namespace std; Point startPt(0,0); Point endPt(0,0); void onMouse( int event, int x, int y, int flags, void* ) { if( event == CV_EVENT_LBUTTONUP) startPt = Point(x,y); if( event == CV_EVENT_RBUTTONUP) endPt = Point(
2 2023-05-10
编程技术问答社区
将Kinect深度转换为RGB
我正在使用OpenNi和OpenCV(但没有最新的代码并提供OpenNi支持).如果我只是将深度通道发送到屏幕 - 它看起来很黑,很难理解.因此,我想为用户以颜色显示一个深度通道,但找不到如果不丢失准确性的方法.现在我这样做: xn::DepthMetaData xDepthMap; depthGen.GetMetaData(xDepthMap); XnDepthPixel* depthData = const_cast(xDepthMap.Data()); cv::Mat depth(frame_height, frame_width, CV_16U, reinterpret_cast(depthData)); cv::Mat depthMat8UC1; depth.convertTo(depthMat8UC1, CV_8UC1); cv::Mat falseColorsMap; cv::applyColorMap(depthMat
4 2023-05-10
编程技术问答社区
如何在Windows和Visual Studio 2010中安装Openni?
我想使用此代码与Kinect进行Kinect,因为我的编码都在C ++中,并且我意识到我需要Openni. VideoCapture capture( CV_CAP_OPENNI ); 问题是,我找不到OpenNi的最新指南分期付款.当我找到一些好的指南时,链接已经死了.谁能在Windows和Visual Studio 2010中给我链接,以便在Windows和Visual Studio中安装良好的链接?我会非常感谢. 解决方案 VideoCapture capture( CV_CAP_OPENNI );听起来就像是使用openCV构建的openni支持.我建议先安装OpenNI.版本1.5.4.0您可以找到您需要按以下顺序安装3件事: Openni Nite 传感器kinect kinect (Avin的驱动程序具有kinect的补丁,默认传感器驱动程序适用于默认传感器驱动程序.像传感器一样的华硕) 您安装了OpenNI并起作用:Primesense
0 2023-05-09
编程技术问答社区
OpenNI和OpenCV:cv2.imshow()崩溃,错误:(-215:断言失败) dst.data == (ucar*)dst_ptr in function 'cvShowImage'。
我正在尝试从连接到Windows 10机器的Orbbec Astra Pro摄像头接收深度图像.我已经安装了opencv-python 4.0.0.21和primesense 2.2.0.30.post5,它似乎是最新的稳定python软件包. 这是我正在尝试的代码段: import numpy as np import cv2 from primesense import openni2 from primesense import _openni2 as c_api openni2.initialize("./OpenNI-Windows-x64-2.3/Redist") if openni2.is_initialized(): print('openni2 ready') else: print('openni2 not ready') dev = openni2.Device.open_any() depth_stream = dev.
2 2023-05-09
编程技术问答社区
使用Kinect的手指/手势识别
在解释问题之前,让我解释一下我的需求. 我期待着手工受控的应用程序. 使用Palm进行导航,并使用抓手/拳头单击. 目前,我正在与OpenNi合作,这听起来很有希望,而且很少有例子,因为我在样本中使用了Insuild Hand Tracker,但事实证明这很有用.这是我的时间. 我想问的是 1)拥有拳头/抢探测器的最佳方法是什么? 我在提取的RGB数据上培训并使用了Adaboost拳头分类器,这非常好,但是它有太多的错误检测可以继续前进. 所以,我在这里构架了两个问题 2)还有其他能够使用深度数据实现我的需求的好库吗? 3)我们可以训练自己的手势,尤其是用手指,因为某些纸是指hmm,如果是的,我们如何继续使用Openni之类的图书馆? 是的,我尝试使用Openni中的中间货物图书馆,例如Grab detecter,但它们不会达到我的目的,因为它既不适合我的需求. 除了我问的东西,如果您认为有什么可以帮助我的好建议. 解决方案
2 2023-05-09
编程技术问答社区
应该如何编写binding.gyp来建立一个带有OpenNI的Node.js插件?
我正在尝试构建使用openni的node.js addon.我以前从未使用过Node-GYP,因此我尝试设置binding.gyp文件,以便将OpenNi库作为构建的一部分.我实际编写的代码只是 Hello World示例. binding.gyp文件基于 nuimotion 在Github上,正在做类似的事情.这是我的: { "targets": [ { "target_name": "onijs", "sources": [ "src/main.cpp" ], "include_dirs": [ "./src/Include" ], "libraries": [ "-lOpenNI2", "-Wl,-rpath ./" ] } ] } 这是我所做的(在OSX中工作): 创建了一个名为onijs/ 的节点项目文件夹 下载并提取的Openni 将
0 2023-04-26
编程技术问答社区
java.library.path中缺少文件
在编译Openni的演示时,我偶然发现了此错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: no OpenNI.jni in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1045) at org.OpenNI.NativeMethods.(NativeMethods.java:34) at org.OpenNI.Context.initFromXmlEx(Context.java:317) at org.OpenNI.Context.createFromXmlFile(Context.java
10 2023-04-21
编程技术问答社区
当使用std::mutex而不是boost::mutex时出现未处理的异常
我尝试摆脱代码中的一些增强依赖项,而是使用新的C ++ 11功能(Visual Studio 2013). 在我使用的一个组件中,我将boost::mutex与boost::lock_guard一起使用,一切正常.当我将std::mutex与std::lock_guard一起使用时,从main()返回时会出现以下错误. brabbertester.exe中的0x7721e3be(ntdll.dll)的未经处理的例外:0xc0000005:访问违规读取位置0xa6a6b491. 真正的项目非常复杂,因此很难提供一个完整的工作代码示例来重现此问题.在我的真实项目中,互斥符在运行时加载的共享库中使用(但是当我从main()返回时,应该已经卸载. 我的问题是: 是boost::mutex和std::mutex设计的行为绝对相同吗? 如果没有,有什么区别?使用std::mutex而不是boost::mutex?
0 2023-04-07
编程技术问答社区
CMAKE无法找到OpenNI
我一直在尝试使用Kinect Libraries(http://nicolas.burrus.name/index.php/research/kinectusenestk)运行"启动教程"),但我偶然发现了一个错误. 当我在CLI中尝试以下行: cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. 我收到以下错误: CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindPackageHan dleStandardArgs.cmake:91 (MESSAGE): Could NOT find OpenNI (missing: OPENNI_LIBRARY OPENNI_INCLUDE_DIR) Call Stack (most recent call first): D:/Program Files/CMake 2.8/share/cmake-2.8
82 2023-03-16
编程技术问答社区
OpenCV OpenNI 校准Kinect
我用家园捕获Kinect: capture.retrieve( depthMap, CV_CAP_OPENNI_DEPTH_MAP ) capture.retrieve( bgrImage, CV_CAP_OPENNI_BGR_IMAGE ) 现在,我不知道我是否必须校准kinect才能使深度像素值正确. 也就是说,如果我从图像rbg中取一个像素(u,v),请从图像深度中获取正确的深度值(u,v)? depthMap.at(u,v) 任何帮助都非常感谢. 谢谢! 解决方案 您可以检查注册是否如此: cout
2 2023-03-06
编程技术问答社区
有可能从播放中改变AlternateViewPointCap或MirrorCap
我正在使用其他人使用OpenNI录音机模块记录的数据.不幸的是,他们在记录过程中意外设置了镜像功能,因此我遇到了一些问题1.使用MirrorCap和2.使用备用ViewPointCap对齐深度.我尝试从深度节点访问这些功能,如下所示: xn::Context ni_context; xn::Player player; xn::DepthGenerator g_depth; xn::ImageGenerator g_image; ni_context.Init(); ni_context.OpenFileRecording(oni_filename, player); ni_context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_depth); ni_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image); g_depth.GetMirrorCap().SetMirror(false); g
2 2023-03-01
编程技术问答社区
由于 "类型名称不允许 "而使代码在MSVC++ 2010中工作的变通方法
我正在尝试实现一个手指检测,该链接被给出在这里.我正在浏览MSVC2010中的代码,它给了我错误,如图所示,如下所示.有人可以告诉我为什么以下代码会给我错误吗?这与以下问题有关; 1 , 2 , 3 ?有可能解决方法吗?我已经包括: #include #include 我也尝试了: unsigned short depth = (unsigned short) (v[2] * 1000.0f); // hand depth unsigned short near = (unsigned short) (depth - 100); // near clipping plane unsigned short far = (unsigned short) (depth + 100); // far clipping plane 但不起作用. 谢谢, ikel 解决方案 原因是near和far已经在其他地方已经是
8 2023-02-28
编程技术问答社区
不能用华硕Xtion Pro Live从VideoCapture OpenCV抓取图像
i刚刚安装了OpenCV 2.4.7 OpenNI和Primesense传感器,可以在以下构建信息中看到. 我从VideoCapture对象中抓取问题.例如,如果我运行openni_capture示例,我会得到"无法抓住图像".但是我获得了有关深度和RGB摄像机的信息,因此我认为我要正确打开VideoCapture对象,但是当它尝试抓住图像时,Grab函数返回0. 我正在使用Asus Xtion Pro Live和OpenNI和传感器正常工作,因为我能够运行Niviewer等示例. 我很高兴解决这个问题. 谢谢! General configuration for OpenCV 2.4.7 ===================================== Version control: unknown Platform: Host: Linux 3.5.0
16 2023-02-24
编程技术问答社区
加载ONI:Can��t创建所请求类型的任何节点
我正在使用GameOverhack的addon ofxopenni在OpenFrameworks上工作. 我以Xcode 7.2. 对于那些以前使用过此插件的人,您必须知道插件有几个示例,包括一个简单的ONI录制.我在Linux系统上记录了一个旧的ONI文件,并尝试在OS X安装上运行它.我有以下错误: [注意] Ofxopennidevice [1]:启动oni player:test.oni [verbose] Ofxopennidevice [1]:加载oni:../../../../../../data/test.onistatus:not 创建请求类型的任何节点! 出现一个空白屏幕.有人知道这一点吗? 解决方案 由于$PROJECT_ROOT/bin/data中缺少的 config 文件夹而发生此错误.我在一个较旧的项目中包括了ofxOpenNI,因此,您必须替换 bin 文件夹的指令. 这可能对将来面临同一问题的人有帮助.
0 2023-02-24
编程技术问答社区
OpenNI 1.5::无法运行文档中的代码
我正在尝试从OpenNI 1.5文档运行示例代码.我已导入库所需的XncppWrapper.h,以便我可以使用C ++.该代码在特定变量" Bshouldrun"上只有一个错误.我知道这是一个错误它应该被声明为某种东西,但由于我是新手,并且文档不包含主上方的任何内容,所以我不知道该声明它为..请帮助! 预先感谢. #include #include #include int main() { XnStatus nRetVal = XN_STATUS_OK; xn::Context context; // Initialize context object nRetVal = context.Init(); // TODO: check error code // Create a DepthGenerator node xn::Depth
2 2023-02-24
编程技术问答社区
Openni 2.2是否支持Kinect v2?
我正在使用win8.1上的新kinect并安装了openni2和nite2,但他们找不到我的kinect. 那么,我该怎么做才能使它运行? 解决方案 OpenNi不直接支持Kinect(V1或V2).但是您可以为此安装驱动程序.我在Windows和Linux中成功使用了带有OpenNI的Kinect V1 ...在Windows中,您只需要安装Kinect SDK 1.8 for V1 ...我没有为V2进行测试,但是我几乎是确保它不起作用...很可能您需要等待一个打开的驱动程序... 总结: OpenNi 2.2支持Kinect V2? 否 那么我该怎么办才能运行? 等待可与OpenNi一起使用的Kinect开放式驱动程序 其他解决方案 在 scipipital Openni2 repository 他们似乎正在根据Microsoft SDK官方为OpenNi2的Kinect V2驱动程序工作.我没有自己测试过. 其他解决方案
8 2023-02-24
编程技术问答社区