Mat 中的畫素訪問
OpenCV Mat 結構中的單個畫素訪問可以通過多種方式實現。要了解如何訪問,最好先學習資料型別。
Basic Structures 解釋了基本資料型別。簡而言之,CV_<bit-depth>{U|S|F}C(<number_of_channels>)
是一種型別的基本結構。除此之外,瞭解 Vec
結構也很重要。
typedef Vec<type, channels> Vec< channels>< one char for the type>
其中 type 是 uchar, short, int, float, double
之一,每種型別的字元分別是 b, s, i, f, d
。
例如,Vec2b 表示 unsigned char vector of 2 channels
。
考慮 Mat mat(R,C,T)
,其中 R 是#rows,C 是#cols,T 是型別。訪問 mat
的(i, j)座標的一些示例是:
2D:
If the type is CV_8U or CV_8UC1 ---- //they are alias
mat.at<uchar>(i,j) // --> This will give char value of index (i,j)
//If you want to obtain int value of it
(int)mat.at<uchar>(i,j)
If the type is CV_32F or CV_32FC1 ---- //they are alias
mat.at<float>(i,j) // --> This will give float value of index (i,j)
3D:
If the type is CV_8UC2 or CV_8UC3 or more channels
mat.at<Vec2b/Vec3b>(i,j)[k] // note that (k < #channels)
//If you want to obtain int value of it
(int)mat.at<uchar>(i,j)[k]
If the type is CV_64FC2 or CV_64FC3
mat.at<Vec2d/Vec3d>(i,j)[k] // note that k < #channels
請注意,在 <...>
中輸入正確的型別非常重要,否則,你可能會遇到執行時錯誤或不需要的結果。