在opencv中使用Mat :: at(i,j)表示2-D Mat对象

Cha*_*ani 7 c++ opencv image-processing

我正在使用Ubuntu 12.04和OpenCV 2

我写了以下代码:

IplImage* img =0;
img = cvLoadImage("nature.jpg");
if(img != 0)
{
    Mat Img_mat(img);
    std::vector<Mat> RGB;
    split(Img_mat, RGB);

    int data = (RGB[0]).at<int>(i,j)); /*Where i, j are inside the bounds of the matrix size .. i have checked this*/ 
}
Run Code Online (Sandbox Code Playgroud)

问题是我在数据变量中得到负值和非常大的值.我想我在某个地方犯了一些错误.你能指出来吗?
我一直在阅读文档(我还没有完全完成它...它非常大.)但是根据我的阅读,这应该可行.但它不是.这里出了什么问题?

rot*_*age 11

Img_mat是一个3通道图像.每个通道由uchar数据类型中的像素值组成.因此split(Img_mat, BGR)Img_mat其分成3个蓝色,绿色和红色的平面,这些平面共同存储在矢量中BGR.所以,BGR[0]是第一个(蓝色)平面与uchar数据类型像素...因此,这将是

int dataB = (int)BGR[0].at<uchar>(i,j);
int dataG = (int)BGR[1].at<uchar>(i,j);
Run Code Online (Sandbox Code Playgroud)

等......

@bsdnoobz我想你想写

int dataB = (int)BGR[0].at<uchar>(i,j);
int dataG = (int)BGR[1].at<uchar>(i,j);
Run Code Online (Sandbox Code Playgroud)

等......