1,原理
基于中心扩展算法,给定一个初始锚点,往四个方向向外拓展,每个方向在拓展时遇到轮廓边界则停止。
获取的矩形是不带旋转的,且能否准确找到最大内接矩形,跟初始锚点的位置选取有一定关系。
2,代码
代码分为2部分,原理一样,实现方式不同。
代码(1):
#include <iostream>
#include<opencv2/opencv.hpp>
#include<vector>
using namespace cv;
using namespace std;
/**
* @brief expandEdge 扩展边界函数
* @param img:输入图像,单通道二值图,深度为8
* @param edge 边界数组,存放4条边界值
* @param edgeID 当前边界号
* @return 布尔值 确定当前边界是否可以扩展
*/
bool expandEdge(const Mat & img, int edge[], const int edgeID)
{
//[1] --初始化参数
int nc = img.cols