我进行这样的操作: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]);
阿神2017-04-17 15:32:29
at 関数のパラメーターは、x、y ではなく、at (行、列) であるため、範囲外エラーが発生し、この 2 つを置き換える必要があります。
x と y を使用する必要がある場合は、at(cv::Point(x,y)) を使用できます。
さらに、opencv は例外をスローします。catch(std::Exception e) を使用して例外をキャッチし、エラー情報を表示できます。
阿神2017-04-17 15:32:29
at という名前の関数には通常、境界チェックがあります。ここでのチェックはアサーション、つまり CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
を通じて実装されます。式のセマンティクスによれば、アサーションが失敗する理由は、座標が「i>=size」の範囲外であることです。
xpos + i
とypos + j - 1
の値の範囲を確認してください。注:チェック時の符号なし変換のため、0未満の値はより大きな値となります。