私はcv::Mat mat
を持っていて、それを使っていくつかのことを行い、さらにコード化するためにstd::vector<cv::Points> diagonalPoints
を得て、ここでそれは手間がかかります - それらを作成した後、 (したがって、各列について、私は[i].x
と[i+1].x
を比較します - 以下を参照)。しかし、計算した結果、それぞれmaxDist
という列があります。これは、先の例よりもbiigerであり、の列の中で最も大きな列ではありません。です。各繰り返しの最大値を取得する
ここに私のコードの重要な部分だ:出力が(ちょうど最初の列のために、それを減らすために)である
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
を取得したいと思いそれが最大の価値だからです。確かに私のコードの単純な変更かもしれませんが、実際にはそれを取得しません。私は何を変えるべきですか?
ありがとうございます!
ループの外側で印刷を移動し、ループ内のmaxをキャプチャするだけです。 – NathanOliver
@ NathanOliverこの場合、最後の反復だけが出力されます。 'maxDist'を設定する前に – Viktoria
と入力すると、以前の値と比較することができます。それがより高い場合にのみ設定します。それを 'for'ループの外側に出力します。 – Nipun