0

cv::imread を使用して画像を読み込み、その画像でいくつかのプロセスを実行していますが、返された Mat の値を imread 関数から読み取れない理由がわかりません。Mat.at メソッドを使用しました。

Mat iplimage = imread("Photo.jpg",1); //input
    for(int i=0;i<iplimage.rows;i++){
        for(int j=0;j<iplimage.cols;j++){
            cout<<(int)iplimage.at<int>(i,j)<<" ";
        }
        cout<<endl;
    }

しかし、エラーが表示されました:

OpenCV エラー: アサーションに失敗しました ( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p [1]*channels()) && ((((Sizeof(size_t)<<28)|0x8442211) >> ((データタイプ<_Tp>::深さ) ​​& ((1 << 3) -1))*4 ) & 15) == elemSize1()) は不明な関数です。ファイル: "c:\opencv2.2\include\opencv2\core\mat.hpp"、517 行目

しかし、直接アクセスする方法を使用しても問題ありません。

 Mat iplimage = imread("Photo.jpg",1); //input
     for(int i=0;i<iplimage.rows;i++){
         for(int j=0;j<iplimage.cols;j++){
        cout<<(int)iplimage.data[i*iplimage.cols + j]<<" ";                 
         }
    cout<<endl;
     }

Mat.at メソッドを使用して上記の Mat にアクセスする方法を教えてください。ご協力いただきありがとうございます!

4

4 に答える 4

0

この回答を参照してください。あなたの場合、返された Mat は 3 次元であるためiplimage.at<int>、アサーションに失敗します。前述の回答の説明のように、各チャネルの強度にアクセスするだけで済みます。

于 2012-05-05T17:16:54.403 に答える
0

解決策を見つけました。: inputImage.at<int>(i,j)orinputImage.at<float>(1,2) の代わりに(int)inputImage.at<uchar>(1,2)orを使ったから(float)inputImage.at<uchar>(1,2) です。

于 2012-05-07T04:21:30.937 に答える