gpt4 book ai didi

c++ - 使用较少的 STL 运算符对点进行排序

转载 作者:行者123 更新时间:2023-11-28 02:30:08 28 4
gpt4 key购买 nike

我想对来自 openCV Blob 检测的 110 个关键点进行排序,从上到下,从左到右。但有时会出错。

bool sortRects(const Rect &a, const Rect &b)
{
return ( (a.x + a.y*10) < (b.x + b.y*10) );
}

vector<Rect> convertedKeyPoints;

for(int i = 0; i < detectedLedPositions.size(); i++)
{
Point2f point(detectedLedPositions[i].pt.x+1.f, detectedLedPositions[i].pt.y + 1.f);
Rect keyPointToRect(detectedLedPositions[i].pt, point);
convertedKeyPoints.push_back(keyPointToRect);
}

sort(convertedKeyPoints.begin(), convertedKeyPoints.end(), sortRects);

for(int i = 0; i < convertedKeyPoints.size(); i++)
{
QPointF currentPoint(QPoint(convertedKeyPoints[i].tl().x , convertedKeyPoints[i].tl().y));
ledPosition.push_back(currentPoint);
}

这是将 转换为 QPointF 后调试控制台的输出。

QPointF(133, 138)
QPointF(188, 134)
QPointF(240, 134)
QPointF(290, 135)
QPointF(347, 142)
QPointF(454, 137)
QPointF(398, 144)
QPointF(507, 136)
QPointF(27, 189)
QPointF(191, 191)
**QPointF(138, 199)**
QPointF(244, 191)
QPointF(293, 194)
QPointF(345, 189)
QPointF(400, 194)
QPointF(451, 190)
QPointF(505, 192)

那我做错了什么?

最佳答案

我认为您的排序操作假设 a.x<10,但在您的示例中并非如此。

尝试:

bool sortRects(const Rect &a, const Rect &b)
{
return a.y == b.y ? a.x < b.x : a.y < b.y;
}

这将首先在 Y 轴上排序(从上到下),在两者完全相等的情况下,将返回到在 X 轴上排序(从左到右)。

关于c++ - 使用较少的 STL 运算符对点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com