删除指定轮廓

删除指定轮廓

typedef struct Contours
{//轮廓点结构体,通过malloc来分配
	int height;//bmp Y坐标
	int width;//bmp X坐标
	int stateFlag;//点类型标志位
} contour;

typedef struct ContourInfo
{//轮廓信息结构体,通过malloc来分配
	int position;//记录单个轮廓在轮廓点序列中的起始位置
	int count;//记录单个轮廓的点个数
} contourInfo;

void contourDelete( contour* _rContours, const contourInfo* _ContoursInfo, const int _Contour_I )
{
	int contour_Position = 0;//需删除的轮廓点的位置
	int contour_Count = 0;//需删除的轮廓的偏移量
	int contour_Point_Sum = 0;//用于保存轮廓点的总数量
	int contour_Memcpy = 0;//需拷贝的contour数量
	int contour_Surplus = 0;//剩余轮廓点总数
	contour* offset_Start = NULL;//用于删除指定位置轮廓的偏移量头指针
	contour* offset_End = NULL;//用于删除指定位置轮廓的偏移量尾指针

	
	contour_Point_Sum = _rContours[0].stateFlag;//保存点总数
	contour_Position = _ContoursInfo[ _Contour_I].position;//头位置
	contour_Count = contour_Position + _ContoursInfo[ _Contour_I].count;//尾位置+1
	offset_Start = _rContours + contour_Position;//输入删除部分的偏移量
	offset_End = _rContours + contour_Count;//输入删除部分的偏移量
	contour_Memcpy = contour_Point_Sum - contour_Count;//计算拷贝数量
	contour_Surplus = contour_Point_Sum - _ContoursInfo[ _Contour_I].count;//计算剩余轮廓点个数
	memcpy( offset_Start, offset_End, contour_Memcpy * sizeof( contour) );//拷贝并覆盖删除部分
	offset_Start = _rContours + contour_Surplus;//将偏移后需删除的尾部的头指针定位
	memset( offset_Start, 0, (_ContoursInfo[ _Contour_I].count) * sizeof( contour) );//剩余位置置0
	_rContours[0].stateFlag = contour_Surplus;//将剩余轮廓点数保存
}


你可能感兴趣的:(图像处理算法)