在Visual Studio 2012中对低分辨率图像进行OpenCV blob跟踪

时间:2012-12-11 23:44:31

标签: visual-c++ opencv kinect-sdk

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

  

Example image of touches

我的问题是如何最好地使用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中的一些例子中喋喋不休。

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

0 个答案:

没有答案