1

我在 C++ 项目中处理来自 CASIA 数据库和 opencv 的二进制图像。我正在寻找一种仅提取轮廓(包含轮廓的边界框)的方法。原始图像是 240x320,我的目标是只在新图像中获得轮廓(比如说 100x50 大小)。我的第一个想法是获取行和列上“白色”像素的最小和最大位置,并在新图像中获取此矩形内的像素,但我认为这根本没有效率。如果您有任何建议,我将非常乐意听到。左边是输入,右边是输出。

输入输出

4

1 回答 1

0

您可以使用内置的 OpenCV 功能从二进制图像中查找轮廓:

例如

// 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()(无论您是否需要旋转边界框)。

于 2019-12-04T14:05:13.253 回答