#ifndef __COMPARER_H__ #define __COMPARER_H__ #include "ContourSelector.h" template struct Comparer { bool operator()(const ContourSelector::PairTExtend& s1, const ContourSelector::PairTExtend& s2) { ContourGfExtend *pContourGf1=s1.second; ContourGfExtend *pContourGf2=s2.second; double gfValue1=0.0; double gfValue2=0.0; switch (T) { case Perimeter: { gfValue1 = pContourGf1->getContourPerimeter(); gfValue2 = pContourGf2->getContourPerimeter(); } break; case Area: { gfValue1 = pContourGf1->getContourArea(); gfValue2 = pContourGf2->getContourArea(); } break; case CenterX: { gfValue1 = pContourGf1->getContourCenter().x; gfValue2 = pContourGf2->getContourCenter().x; } break; case CenterY: { gfValue1 = pContourGf1->getContourCenter().y; gfValue2 = pContourGf2->getContourCenter().y; } break; case LeftTopX: { gfValue1 = pContourGf1->getLeftTop().y; gfValue2 = pContourGf2->getLeftTop().y; } break; case LeftTopY: { gfValue1 = pContourGf1->getLeftTop().y; gfValue2 = pContourGf2->getLeftTop().y; } break; case RightBottomX: { gfValue1 = pContourGf1->getRightBottom().x; gfValue2 = pContourGf2->getRightBottom().x; } break; case RightBottomY: { gfValue1 = pContourGf1->getRightBottom().y; gfValue2 = pContourGf2->getRightBottom().y; } break; case AspectRatio: //长宽比 { gfValue1=pContourGf1->getContourAspectRatio(); gfValue2=pContourGf2->getContourAspectRatio(); } break; case Rectangularity: //矩形度 { gfValue1=pContourGf1->getContourRectangularity(); gfValue2=pContourGf2->getContourRectangularity(); } break; //灰度值 case GrayValue: { gfValue1=pContourGf1->getContourGrayValue(); gfValue2=pContourGf2->getContourGrayValue(); } break; case Width: { gfValue1=pContourGf1->getSize().width; gfValue2=pContourGf2->getSize().width; } break; case Height: { gfValue1=pContourGf1->getSize().height; gfValue2=pContourGf2->getSize().height; } break; case RedPercentage: { gfValue1=pContourGf1->getColorPercentage(0); gfValue2=pContourGf2->getColorPercentage(0); } break; case GreenPercentage: { gfValue1=pContourGf1->getColorPercentage(1); gfValue2=pContourGf2->getColorPercentage(1); } break; case BluePercentage: { gfValue1=pContourGf1->getColorPercentage(2); gfValue2=pContourGf2->getColorPercentage(2); } break; case RotRectArea: { gfValue1 = pContourGf1->getRotatedRect().size.height * pContourGf1->getRotatedRect().size.width; gfValue2 = pContourGf2->getRotatedRect().size.height * pContourGf2->getRotatedRect().size.width; } break; } if (isGreater) { return gfValue1 > gfValue2; //从da到xiao排序 } else { return gfValue1 < gfValue2; } } }; #endif