2017-08-10 17 views
-2

私は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を取得したいと思いそれが最大の価値だからです。確かに私のコードの単純な変更かもしれませんが、実際にはそれを取得しません。私は何を変えるべきですか?

ありがとうございます!

+0

ループの外側で印刷を移動し、ループ内のmaxをキャプチャするだけです。 – NathanOliver

+1

@ NathanOliverこの場合、最後の反復だけが出力されます。 'maxDist'を設定する前に – Viktoria

+0

と入力すると、以前の値と比較することができます。それがより高い場合にのみ設定します。それを 'for'ループの外側に出力します。 – Nipun

答えて

1

私はあなたが列の終わりを見つけたときに印刷を移動する必要があると思います。

for (int i = 0; i < diagonalPoints.size() - 1 /* need to stop before going off the end */; i++) { 
    if (diagonalPoints[i].x == diagonalPoints[i + 1].x) { 
     // same column, so calculate distance and compare 
     int dist = diagonalPoints[i + 1].y - diagonalPoints[i].y; 
     if (dist > maxDist) { 
      maxDist = dist; 
      maxDistColumn = diagonalPoints[i].x; 
      firstPt = diagonalPoints[i]; 
      secondPt = diagonalPoints[i + 1]; 
     } 
    } 
    else { 
     // new column, so print the maximum and reset 
     std::cout << maxDist << " in i: " << maxDistColumn << "\n"; 
     farestPoints = std::make_pair(firstPt, secondPt); 
     std::cout << farestPoints.first << ", " << farestPoints.second << " "; 
     maxDist = 0; 
    } 
} 

// after the loop, we still have the last column to print 
std::cout << maxDist << " in i: " << maxDistColumn << "\n"; 
farestPoints = std::make_pair(firstPt, secondPt); 
std::cout << farestPoints.first << ", " << farestPoints.second << " 
+0

ありがとう、作品は完璧です!本当にそれを得て、それを 'else'の部分に入れることはできませんでした。 – Viktoria

関連する問題