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