問題の説明よりも状況を説明する方がはるかに簡単です。私は最初の値の最初の番号(24)との値を信じるOpenCV cv :: Mat.at関数を使用するときに正しい型名を使用する方法
value near i,j: [34, 42;
39, 44]
value at i,j: 24
:私はOpenCVの使用してC++で、次の2つのコード行を使用します。
にstd::cout << "value near i,j: " << myMat(Rect(i,j,2,2)) << std::endl;
std::cout << "value at i,j: " << myMat.at<double>(i,j) << std::endl;
をそして私は次のような結果を得ます第2の線(34)は等しくなければならない。 myMatのデータ型は、現在CV_64Fとして定義されている必要があります。私の結論は、OpenCVデータ型からC++プリミティブ型への変換では、私がCV_16Sを最初に使用したときの値が非常に悪かったため、何か間違っているということです。では、cv :: Matの構造体の値に正しくアクセスするためには、どのような修正が必要ですか?
P.S:次のようにmyMatが作成され、割り当てられます。
Mat yourMat, myMat;
[... yourMat is assigned ...]
Sobel(yourMat, myMat, CV_64F, 1, 0, 3, 1, 0, BORDER_DEFAULT);
P.S.2:私は同様の質問hereを見つけましたが、答えは唯一の回避策割り当てることでがあるように思われます。
優秀な点。私はMat.atとRectの2つの異なるパラメータの順序を知っていましたが、それらを結びつけることはできませんでした。タイプの問題(この場合)だったという私の控除は間違っていて、あなたの答えは私の問題を解決したことが判明しました。このトピックにマッチするだけで、誰かが問題のタイプマッチングの部分についてコメントしてくれればうれしいでしょう:CVデータ型がCV_16Sなら、どのようにMat.atコマンドを使用しますか?そのため、 'myMat.at(j、i)'、 'myMat.at (j、i)'または 'myMat.at (' 'myMat.at')は依然として誤った結果を与えるでしょう。 –
hekimgil
更新された回答を確認 – Miki
ありがとう、素晴らしい仕事。あなたのご指導を受けて、私はMatの完全なリストを持つ[この便利なリンク](http://ninghang.blogspot.com.tr/2012/11/list-of-mat-type-in-opencv.html)も見つけましたOpenCVの型とそれに対応するC++型。 – hekimgil