描述問題可能比描述問題要容易得多。我用下面的代碼兩行C++使用的OpenCV:如何在使用OpenCV cv :: Mat.at函數時使用正確的類型名稱
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;
我得到如下結果:
value near i,j: [34, 42;
39, 44]
value at i,j: 24
我相信,在第一個值(24)和值的第一個數字第二行(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的兩個不同的參數順序,但似乎我沒有設法將它們綁定在一起。事實證明,我的推論,這是一個類型問題(在這種情況下)是錯誤的,你的答案解決了我的問題。只是爲了與主題相匹配,如果有人會關注問題的類型匹配部分:如果CV數據類型是CV_16S,我們將如何使用Mat.at命令?因爲那麼'myMat.at(j,i)','myMat.at (j,i)'或'myMat.at (j,i)'仍然會給出錯誤的結果。 –
hekimgil
查看更新的答案 – Miki
謝謝,很棒的工作。並且在你的指導下,我還發現了[這個有用的鏈接](http://ninghang.blogspot.com.tr/2012/11/list-of-mat-type-in-opencv.html)和一個完整的Mat列表OpenCV中的類型及其對應的C++類型。 – hekimgil