通过轮廓点对负极点的y值进行调整

负极点位置过低,用轮廓点进行负极点y值的调整。

ChangePosition(std::vector<CvPoint>& ContourPoint)
{
	int size=m_lines.size();
	int miny;
	int sumcathodey=0;
	for (int a=0;a<size;a++)
	{
		sumcathodey+=m_lines[a].p1.y;
	}
	miny=sumcathodey/size;//负极点平均y值
	int maxy;
	int sumanodey=0;
	for (int b=0;b<size;b++)
	{
		sumanodey+=m_lines[b].p2.y;
	}
	maxy=sumanodey/size;//正极点平均y值
	int cathodex,cathodey;
	int pointx,pointy;
	int minpointy=500;
	for (int i=0;i<size;i++)
	{
		cathodex=m_lines[i].p1.x;
		cathodey=m_lines[i].p1.y;
		minpointy=500;
		for (int j=0;j<ContourPoint.size();j++)
		{
			CvPoint pt=ContourPoint[j];
			pointx=pt.x;
			pointy=pt.y;
			if (pointx==cathodex)
			{
				if (pointy<minpointy)
				{
					minpointy=pointy;
				}
			}
		}
		if (((minpointy<(maxy+miny)/2)||(miny-m_lines[i].p1.y>(maxy-miny)/3)||(m_lines[i].p1.y>maxy))&&minpointy<maxy&&minpointy<m_lines[i].p1.y)
		{
			m_lines[i].p1.y=minpointy;
		}
		if (miny-m_lines[i].p1.y>(maxy-miny)*1.5)
		{
			m_lines[i].p1.y=minpointy;
		}
		if (i>=size-5)
		{
			if (m_lines[i].p1.y<m_lines[i-1].p1.y&&minpointy<maxy&&miny-minpointy<(maxy-miny)*0.2)
			{
				m_lines[i].p1.y=minpointy;
			}
		}
		if (i>m_PoleNumber/3)
		{
			if (m_lines[i].p1.y<m_lines[i-1].p1.y&&m_lines[i].p1.y<m_lines[i+1].p1.y&&minpointy<(maxy+miny)/2&&miny-minpointy<(maxy-miny)*0.3)
			{
				m_lines[i].p1.y=minpointy;
			}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/kai69/article/details/78415940