我在C中使用Kinect SDK生成空间平面附近的点图像,目的是将它们用作触摸 . 我附上了一个3x比例的图像,结果是那个过程,所以这一切都是肉汁 .

我的问题是如何最好地使用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 by 90 ish,虽然那是相当随意的 . 一般来说很小 . )

  • OpenCV是否异步?如果我的图像和轮廓矢量首先承认我不是一个特别有才华的C程序员,我会收到很多无效的地址错误 . )

  • 有没有更简单的方法从图像到与图像触摸相对应的一系列点?

作为参考,我在我的OpenCV下载和this example中的一些例子中喋喋不休 .

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