openCV绘制轮廓的更好方法

时间:2015-07-14 13:59:32

标签: python opencv

我已经使用openCV网站上提供的代码根据ROI直方图检测到了这只手,这是我获得的结果enter image description here

根据这个结果,我想绘制轮廓,但是得到的图像不是我未来处理所需的图像。 enter image description here

为了获得更平滑的轮廓,我需要做些什么?谢谢!

1 个答案:

答案 0 :(得分:1)

您的图片中有太多“漏洞”。试试一些morphology

这是C ++代码,但您可以轻松移植到Python。您可能需要稍微调整一下参数。

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");
    Mat1b binary;
    cvtColor(img, binary, CV_BGR2GRAY);
    threshold(binary, binary, 1, 255, THRESH_BINARY);

    Mat1b morph;
    Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(11,11));
    morphologyEx(binary, morph, MORPH_CLOSE, kernel, Point(-1,-1), 3);

    vector<vector<Point>> contours;
    findContours(morph.clone(), contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);

    /// Draw contours
    Mat3b draw = img.clone();
    for (int i = 0; i < contours.size(); i++)
    {
        drawContours(draw, contours, i, Scalar(0,0,255), 2);
    }

    return 0;
}

如果您关闭您的图片,您会得到更好的结果,如下所示:

enter image description here

但是,您可能需要从之前的处理中获得更好的结果。