ホームページ  >  に質問  >  本文

c++ - opencv在访问像素点时终止运行

我进行这样的操作:
image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]
就会终止程序,然后debug下发现call stack:定位到上一行image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]

CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);

大家讲道理大家讲道理2766日前543

全員に返信(2)返信します

  • 阿神

    阿神2017-04-17 15:32:29

    at 関数のパラメーターは、x、y ではなく、at (行、列) であるため、範囲外エラーが発生し、この 2 つを置き換える必要があります。
    x と y を使用する必要がある場合は、at(cv::Point(x,y)) を使用できます。
    さらに、opencv は例外をスローします。catch(std::Exception e) を使用して例外をキャッチし、エラー情報を表示できます。

    返事
    0
  • 阿神

    阿神2017-04-17 15:32:29

    at という名前の関数には通常、境界チェックがあります。ここでのチェックはアサーション、つまり CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]); を通じて実装されます。式のセマンティクスによれば、アサーションが失敗する理由は、座標が「i>=size」の範囲外であることです。

    xpos + iypos + j - 1の値の範囲を確認してください。注:チェック時の符号なし変換のため、0未満の値はより大きな値となります。

    返事
    0
  • キャンセル返事