空の行列hide_image
をゼロ値で作成します。 内容は正しいです - 672x896各要素は値で埋める必要があります、私はループでそれを行います。しかし(0, 299)
要素コードに例外をスロー:cv :: cv :: Matオブジェクトをループしている間のメモリ位置の例外
Unhandled exception at 0x00007FFD3C063C58 in stego.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000D2B033E5F0. occurred
私は、関数をデバッグし、例外がループでJ値の依存することが分かりました。私はjを設定することができます< 299と問題なく動作するプログラムが、私はすべての行列が必要です。コマンドラインでは、私はこのメッセージが表示さ:
OpenCV Error: Assertion failed ((unsigned)(i1 * DataType<_Tp>::channels) <
(unsigned)(size.p[1] * channels())) in cv::Mat::at, file c:\opencv-
3.3.1\opencv\build\include\opencv2\core\mat.inl.hpp, line 1095
は可能かもしれ、それが原因で間違った行列の初期化の起こるのが、なぜそこに右のdimentionsを示していますか?行は正しい番号で、jをに設定すると、ループはi = 671で終了します。しかし列は少なく、数字299は何にも依存していないようです。
cv::Mat hide_image;
int hide_image_cols = 0, hide_image_rows = 0;
int i_current = 0, j_current = 15;
int curr_bit = 0;
get_img_dim(image, hide_image_cols, hide_image_rows);
hide_image = cv::Mat(hide_image_rows, hide_image_cols, CV_8U);
hide_image = cv::Mat::zeros(hide_image_rows, hide_image_cols, CV_8U);
std::cout << (hide_image.at<cv::Vec3b>(671, 299)) << std::endl; // exception
for (int i = 0; i < hide_image.rows; i++)
for (int j = 0; j < hide_image.cols; j++) {
//exception when j>298
std::cout << (hide_image.at<cv::Vec3b>(i, j)) << std::endl;
}
なぜこの例外が発生するのですか?