gpt4 book ai didi

c++ - Opencv C++ 检测并裁剪图像上的白色区域

转载 作者:行者123 更新时间:2023-11-28 06:54:31 25 4
gpt4 key购买 nike

我在网上搜索过,我已经找到了一些方法来做我想做的事情,但是这些方法与我需要的相比效率不高。

我有一个 kinect(使用 Microsoft SDK),目前正在获取一个人移除背景,将结果保存在一个 3 channel 垫中,人从背景中移除。现在我需要裁剪图像以仅适合那个人,忽略黑色区域。

这是棘手的部分:我没有太多时间可以浪费在每个操作上(我还需要做一些其他操作,这应该是实时工作的。我目前实现的是一个轮廓查找器,它提供只有这个区域,但实时速度真的很慢。因为我只有一个白色区域可以检测到,而且那个区域真的很大(图像区域的 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;

非常感谢!!

编辑:输入图像

enter image description here

最佳答案

如果您的图像没有非黑色异常值(如噪声),您可以忽略 canny 和 findContours,而只是从所有非黑色像素位置创建边界矩形:

int main()
{
cv::Mat in = cv::imread("CropWhite.jpg");

// vector with all non-black point positions
std::vector<cv::Point> nonBlackList;
nonBlackList.reserve(in.rows*in.cols);

// add all non-black points to the vector
//TODO: there are more efficient ways to iterate through the image
for(int j=0; j<in.rows; ++j)
for(int i=0; i<in.cols; ++i)
{
// if not black: add to the list
if(in.at<cv::Vec3b>(j,i) != cv::Vec3b(0,0,0))
{
nonBlackList.push_back(cv::Point(i,j));
}
}

// create bounding rect around those points
cv::Rect bb = cv::boundingRect(nonBlackList);

// display result and save it
cv::imshow("found rect", in(bb));
cv::imwrite("CropWhiteResult.png", in(bb));


cv::waitKey(-1);
return 0;
}

不知道是否有更有效的方法来创建 vector ,在 openCV 中给出,但这应该仍然比 canny 和 findContours 快得多。

使用此输入:

enter image description here

我得到这个结果:

enter image description here

轮廓周围有一些区域,因为您提供了 jpg 图像,我猜轮廓的边界由于压缩而不是真正的黑色。

关于c++ - Opencv C++ 检测并裁剪图像上的白色区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com