计算轮廓的最大内接矩形

1,原理

基于中心扩展算法,给定一个初始锚点,往四个方向向外拓展,每个方向在拓展时遇到轮廓边界则停止。

获取的矩形是不带旋转的,且能否准确找到最大内接矩形,跟初始锚点的位置选取有一定关系

2,代码

代码分为2部分,原理一样,实现方式不同。

代码(1):


#include 
#include

#include

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;
	int nr = img.rows;
	switch (edgeID) {
	case 0:
		if (edge[0] > nr)
			return false;
		for (int i = edge[3]; i <= edge[1]; ++i)
		{
			if (img.at(edge[0], i) &

你可能感兴趣的:(OpenCV,c++,算法,开发语言)