Files
admin d6aeede2bc 导入 XuXuCheck 工程(iOS 干化学尿液试纸分析 App)
从桌面工程复制而来,作为本仓库的 Xuxucheck/ 子目录。

为控制仓库体积做了两处删减:
- 移除 Frameworks/opencv2.xcframework 下的两个 visionOS 切片
  (xros-arm64、xros-arm64-simulator,合计约 106 MB),并同步删掉该
  xcframework 内 Info.plist 里对应的两条 AvailableLibraries 记录,
  只保留 ios-arm64 与 ios-arm64_x86_64-simulator。
- 移除全部 .DS_Store 与 xcuserdata/。

已用 xcodebuild 从本目录完整编译验证:BUILD SUCCEEDED,
ProcessXCFramework 以 --platform ios 成功选中框架,产物含 3699 个 cv:: 符号
(OpenCV 确实链入),嵌入 framework 3 个,与移除无用 pod 之后的状态一致。

仓库约 206 MB,其中 OpenCV 203 MB、其余源码与依赖约 3 MB。
2026-09-23 14:17:31 +08:00

132 lines
3.0 KiB
C++

#ifndef __COMPARER_H__
#define __COMPARER_H__
#include "ContourSelector.h"
template <GF_FLAG T,bool isGreater=true>
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