从二进制图像中提取轮廓

时间:2019-12-04 11:02:19

标签: c++ opencv image-processing feature-extraction binary-image

我正在使用C ++项目中的CASIA数据库和opencv中的二进制图像。我正在寻找一种仅提取轮廓(包含轮廓的边界框)的方法。原始图片为240x320,我的目标是只获取新图片中的轮廓(例如100x50尺寸)。 我的第一个想法是获取行和列上“白色”像素的最小和最大位置,并获取新图像中该矩形内的像素,但是我认为这根本没有效率。如果您有任何建议,我会很高兴听到。左边是输入,右边是输出。

Input-Output

1 个答案:

答案 0 :(得分:0)

您可以使用内置的OpenCV功能从二进制映像中find contours

例如

// using namespace cv;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours( your_binary_mat, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );

请注意,这将查找外部轮廓(忽略上面的图像始终不适用的内部轮廓)并获取点的简化近似值。

访问轮廓后,可以使用boundingRect()minAreaRect()(无论是否需要旋转边界框)。