我想对来自openCV blob检测的110个关键点进行排序,从上到下和从左到右。但有时会出错。使用较少STL运算符的排序点
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)
那我该怎么做?
看看你有问题的三点:191 + 191 * 10 <138 + 199 * 10 <244 + 191 * 10. – 2015-03-24 22:43:33
尝试为y坐标设置更大的权重。乘以1000,而不是乘以10. – 2015-03-24 22:55:15
@JonathanPotter它会工作,直到它不。 – 2015-03-24 22:57:05