我有一个cv::Mat mat
,做一些东西,并得到一个std::vector<cv::Points> diagonalPoints
进一步编码,这里变得棘手 - 在创建这些diagonalPoints
后,我通过每列获得两点之间的最大距离(对于每一列,因此我比较[i].x
和[i+1].x
-见下文)。但是(!)经过计算,我会得到每个maxDist
为一列,这是比bivoger preger,而不是列最大的一列。获取每次迭代的最大值
这里是我的代码的重要组成部分:
for (int i = 0; i < diagonalPoints.size(); i++) {
int dist = diagonalPoints[i + 1].y - diagonalPoints[i].y;
if (diagonalPoints[i].x == diagonalPoints[i + 1].x) {
if (dist > maxDist) {
maxDist = dist;
maxDistColumn = diagonalPoints[i].x;
firstPt = diagonalPoints[i];
secondPt = diagonalPoints[i + 1];
}
}
else if (diagonalPoints[i].x != diagonalPoints[i + 1].x) {
maxDist = 0;
}
std::cout << maxDist << " in i: " << maxDistColumn << "\n";
farestPoints = std::make_pair(firstPt, secondPt);
std::cout << farestPoints.first << ", " << farestPoints.second << " ";
}
的输出(减少它,只是第一列):
[0, 26], [0, 39] - maxDist: 13 in i: 0
[0, 26], [0, 39] - maxDist: 13 in i: 0
[0, 26], [0, 39] - maxDist: 13 in i: 0
[0, 42], [0, 950] - maxDist: 908 in i: 0
[0, 42], [0, 950] - maxDist: 908 in i: 0
[0, 42], [0, 950] - maxDist: 908 in i: 0
但我只是想获得唯一[0, 42], [0, 950] - maxDist: 908 in i: 0
因为它是最大的价值。当然,这可能只是我的代码的一个简单的改变,但我真的不明白。我应该改变什么?
谢谢!
将打印移到循环外部,只捕捉循环中的最大值。 – NathanOliver
@NathanOliver如果是这样,它只打印最后一次迭代。在设置'maxDist'之前设置为 – Viktoria
,您可以与之前的值进行比较。只有在较高时才设置。然后在'for'循环之外打印它 – Nipun