d6aeede2bc
从桌面工程复制而来,作为本仓库的 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。
132 lines
3.0 KiB
C++
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 |