1

我在 C++ 中使用 Kinect SDK 来生成空间平面附近的点图像,目的是将它们用作触摸。我附上了该过程结果的 3 倍比例图像,所以这就是所有的肉汁。

触摸示例图片

我的问题是如何最好地使用 OpenCV 从这个图像(和类似的图像)生成 blob 帧以用于触摸。这是我在我的 ProcessDepth 回调中尝试过的,其中 img 是触摸图像的单色 cv::Mat,而 out 是空的 cv::Mat。

    cv::Canny(img,out,100,200,3);
    cv::findContours(out,contours,cv::RETR_TREE,cv::CHAIN_APPROX_SIMPLE,cv::Point(0,0));

    mu.resize(contours.size());
    mc.resize(contours.size());

    for(int i = 0; i<contours.size();i++){
        mu[i] = cv::moments(contours[i],true);
    }
    for(int i = 0; i<contours.size();i++){
        mc[i] = cv::Point2f(mu[i].m10/mu[i].m00, mu[i].m01/mu[i].m00);
    }

(我会发布更多代码,但 VMWare 不同意让我从中复制粘贴,如果您想要更多,请询问。)

在这一点上,我认为我应该为一个框架获得 blob 的质心,但实际上,它并不存在。当 contour.size() 返回大于 0 时,我会得到错误,或者通过一些修补,我会得到看起来非常奇怪的时刻,比如包含大的负数。所以我的问题如下:

  • 就 findContours 中的标志而言,是否有人建议如何将下面的图像转换为具有良好结果的 blob 数据?
  • 因为我已经有一个单色图像,我什至需要打扰 Cranny 或阈值,如果 Cranny,对于我正在处理的像素数量来说,3 的内核是否太大?
  • 查找轮廓是否适用于这种尺寸的图像?(160 ish 乘 90 ish,虽然那是相当随意的。更普遍的是更小。)
  • OpenCV 函数是异步的吗?如果我的图像和轮廓矢量不作为应用程序类的属性存在,我会收到很多无效的地址错误。(我是第一个承认我不是特别有才华的 C++ 程序员的人。)
  • 有没有一种更简单的方法可以从图像到对应于图像触摸的一系列点?

作为参考,我在我的 OpenCV 下载和这个示例中引用了一些示例。

如果您需要其他信息来更好地回答,请告诉我,我会尽力提供,谢谢!

4

0 回答 0