c++ - opencv在访问像素点时终止运行
大家讲道理
大家讲道理 2017-04-17 15:30:29
0
2
557

我进行这样的操作:
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]);

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
阿神

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

いいねを押す +0
阿神

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート