OpenCV获取连接的边缘

时间:2012-09-20 07:40:32

标签: c++ image-processing opencv contour centroid

我想用它的边缘形成一个不规则形状的手,以便我可以使用http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/moments/moments.html?highlight=moment#code找到这只手的质心。 canny函数削减了边缘,因此我无法从中获得良好的轮廓。 这是输出http://imageshack.us/photo/my-images/208/cannywithblur.png/的示例 和代码。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;

int main(){

    cv::Mat image= cv::imread("open_1a.jpg");
    cv::Mat contours_mat;
    cv::Mat gray_image;

    blur( image, image, Size(3,3) );

    cv::Canny(image,
        contours_mat,
        40,
        120);
    cv::namedWindow("Image");
    cv::imshow("Image",image);
    cv::namedWindow("Canny");
    cv::imshow("Canny",contours_mat);
    cv::waitKey(0);
}

我希望得到一个闭合形状且只有一个轮廓的轮廓。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您可以尝试应用二进制图像的形态学闭合,这应该连接具有小于结构元素大小的间隙的边。

Corresponding function in the documentation

Tutorial on morphological operations