当前位置: 首页 > 知识库问答 >
问题:

C OpenCV 2.4.0 findContours与Kinect深度流碰撞

酆鸿哲
2023-03-14

opencv 2.4.0 findContours函数不断崩溃时遇到问题。不幸的是,我很难找到问题所在。希望有人遇到类似的问题。

我使用Microsoft K4W SDK 1.5从Kinect传感器捕获深度流,将其复制到OpenCV Mat,然后通过cvtColor和threshold将其转换为8UC1图像。我运行countNonZero,只是为了确保在将图像传递给findContours之前图像不是空的。但即使是最简单的FindCountors实现也会崩溃。

这是我的基本html" target="_blank">代码:

rawdepth = Mat(Size(640,480),CV_8UC4);
thresh = Mat::zeros(640,480,CV_8UC1);

// storage for contours 
vector<vector<Point>> contours;

cvtColor(rawdepth,thresh,CV_RGB2GRAY);
threshold(thresh,thresh,0,255,THRESH_BINARY);

if(countNonZero(thresh) > 100 ) {
    // This crashes
    findContours(thresh,contours,RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);           
} 

我确实验证了被传递到findcontour的实际垫是一个单通道图像,并且它不是空白的(即,有大约500个点)。但是我想知道这是否是一个堆或线程相关的问题,因为我听说findcontour实际上可以修改输入Mat?

在这一点上,我将尝试使用刚刚发布的OpenCV 2.4.1,尽管我没有看到任何修复的错误来解决这个问题。

任何想法都非常感谢...

共有3个答案

罗毅
2023-03-14

我想指出,我有同样的问题,关于findContour()方法的崩溃,如第二个答案中提到的,问题是我在调试中使用了opencv_imgproc240.dll和opencv_core240.dll的非调试版本模式,改成XXd.dll解决了问题。

颜君浩
2023-03-14

这里有两个可能的问题。

首先,来自Kinect的原始深度流是16位(3个LSB是播放器索引,其余13位是深度,单位为mm),因此,如果您将该数据复制到8位图像中,您只能得到其中的一半,这是GobbleDeBook。

其次,对于调试和发布配置,OpenCV的编译方式不同。如果使用调试配置文件进行编译,则需要使用调试库(版本#d)。因此,要使用cv::findContours,您需要opencv_imgproc240。[lib/dll]和opencv_core240。[lib/dll]。如果使用了错误的配置,则cv::namedWindow/cv::imshow(对于调试来说非常方便)或cv::findContours都无法正常工作。

希望有帮助。

松旭
2023-03-14

问题是编译器标志将程序的堆栈使用限制在10MB(10,000,000字节)。不幸的是,这对我拍摄的Kinect视频来说还不够。删除编译器标志后,findContour现在将编译并正常工作!

我使用的是VC2010,编译器标志在项目属性下-

在清除它们并重新编译之后,项目运行得非常漂亮!

 类似资料:
  • Kinect for Windows SDK 是微软 Kinect 设备的开发工具包,要求 Windows 7 系统。

  • Kinect Ripple 是一个基于双投影的信息娱乐系统,用户可定制互动面板和屏幕。用户可以使用肢体语言与系统交互,也能与 Xbox 交互。Kinect Ripple 的简单内容编辑器也允许用户快速添加、编辑,且不需要写任何的代码。 此软件可用于:参与(Engage );交互;娱乐;信息传播(Information Disseminate)。

  • 问题内容: 请帮忙 我一直在尝试为XBOX 360设置kinect以在ubuntu上运行,以便开始开发用于控制人形机器人的应用程序。在过去的四天内,我一直在搜索,下载,安装并尝试许多库和驱动程序,以使kinect在Ubuntu上运行。最初,它们都无法正常工作,无论我尝试运行的是哪种库或驱动程序,我都只能使用“ Camorama”和“ guvcview”读取RGB相机。最后,我安装了Ubuntu的新

  • 我试图理解二维卷积神经网络和二维深度卷积神经网络计算的异同。(我理解这些概念)。 例如,假设有一个输入图像是3x3,具有3个通道(RGB),填充为1,步幅为1。过滤器是2x2。 输出是什么?(可以忽略激活和偏差) 我知道常规con2D将有1 3x3输出,而dw con2D将有3输出。除此之外,我有点困惑。谢谢

  • 本节将讨论优化与深度学习的关系,以及优化在深度学习中的挑战。在一个深度学习问题中,我们通常会预先定义一个损失函数。有了损失函数以后,我们就可以使用优化算法试图将其最小化。在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function)。依据惯例,优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题,只需令目标函数的相反数为新的目标函数即可

  • 这就是正在发生的事情,游戏不断停止,因为两个圆圈相互碰撞,我正在尝试通过确保ID是正方形ID来防止这种情况,我试图让圆圈碰撞在一起,而忽略碰撞,但它没有这样做,我不知道如何确切地阻止它相互碰撞,只允许它与正方形碰撞。 基本上我想阻止这个圆与另一个圆碰撞,并允许它与正方形碰撞。 任何帮助都会很好谢谢 游戏引擎引擎类 这是我在扩展game.engine.engine包的game类中检查冲突的地方。 游