use*_*765 2 opencv image-processing computer-vision
我在Opencv中使用阈值来查找轮廓.我的输入是手形图像.有时阈值不好,所以我找不到轮廓.
我已应用以下预处理步骤
1. Grabcut
cv::grabCut(image, result,rectangle,bgModel,fgModel, 3,cv::GC_INIT_WITH_RECT);
Run Code Online (Sandbox Code Playgroud)
灰度转换
cvtColor(handMat,handMat,CV_BGR2GRAY);
meadianblur
medianBlur(handMat,handMat,MEDIAN_BLUR_K);
我使用下面的代码来找到阈值
threshold( handMat, handMat, 141, 255, THRESH_BINARY||CV_THRESH_OTSU );
Run Code Online (Sandbox Code Playgroud)
有时我会得到好的输出,有时阈值输出不好.我附上了两个输出图像.
除了可以找到轮廓的阈值之外,还有其他方法吗?
好的门槛输出:

错误的阈值输出

你尝试过自适应阈值吗?单个阈值很少在现实生活中应用.另一个真理 - 阈值是非线性操作,因此是不稳定的.另一方面,渐变是线性的,因此如果背景是光滑和纯色,您可能希望通过跟踪渐变来找到轮廓.在光照变化或阴影期间,梯度也比阈值处理更可靠.
顺便说一下,当您已找到90%左右的段时,抓取切割使用颜色信息来改善边界上的分割,因此这是一个后处理步骤.此外,您使用矩形初始化抓取切割会使背景颜色受到很多污染.而不是矩形使用一个掩码,你可以确定手是在你的初始段深处标记为GC_FGD; 在您确定背景的区域外标记为GC_BGD; 标记GC_PR_FGD或者可能是其他地方的前景 - 这是通过抓取来改进的.总结一下 - 你的抓取初始化看起来像一个俄罗斯娃娃,有三层表示前景(灰色),可能是前景(白色)和背景(黑色).您可以使用扩张和侵蚀来创建这些图层,请参见下文
总的来说,我的建议是先定义你想要做的事情.您是否在任意移动背景上寻找任意物体的轮廓?如果您正在寻找手的轮廓以在相对均匀的背景上找到手指,我会:1.使用连接组件或MSER来分割手.使用保守面具而非矩形初始化的抓取切割可能会改善结果!2. 如果这是你的目标,使用凸度缺陷找到手指;
| 归档时间: |
|
| 查看次数: |
1839 次 |
| 最近记录: |