我在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中的一些例子中喋喋不休 .
如果您需要其他信息以便更好地回答,请告诉我,我会尽力提供,谢谢!