我在网上搜索过,已经找到了一些方法来完成我想要的事情,但是与我需要的相比,这些方法的效率较低。
我有一个 kinect(使用 Microsoft SDK),当前正在获取一个移除背景的人,将结果保存在 3 通道 Mat 中,并将该人从背景中移除。现在我需要裁剪图像以仅适合该人,忽略黑色区域。
这是棘手的部分:我没有太多时间浪费在每个操作上(我还需要执行其他几个操作,这应该实时工作。我目前实现的是一个轮廓查找器,它只给出这个区域,但实时速度确实很慢。由于我只检测到一个白色区域,并且该区域非常大(图像区域的 50%),我认为有一些更快的方法可以做到这一点,因为我只想要最小值和该白色区域的 x 和 y 的最大值以对其进行裁剪。
这是我目前的裁剪功能:
cv::Mat thresh_canny;
cv::vector<cv::vector<cv::Point> > contours;
cv::vector<cv::Vec4i> hierarchy;
cv::threshold(src, thresh_canny, 0, 255, 0);
cv::Canny(thresh_canny, thresh_canny, 20, 80, 3);
cv::findContours(thresh_canny, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
if (contours.size() != 1)
return false;
cv::Rect r = cv::boundingRect(contours.at(0));
src(r).copyTo(dst);
return true;
非常感谢!!
编辑:输入图像