负极点位置过低,用轮廓点进行负极点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; }