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);
等等...
0
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);
等等...
0
您必须为cv::Mat::at(i,j)
指定正确的类型。您正在以int
形式访问像素,而它应该是uchar
的向量。您的代码应如下所示:
IplImage* img = 0;
img = cvLoadImage("nature.jpg");
if(img != 0)
{
Mat Img_mat(img);
std::vector<Mat> BGR;
split(Img_mat, BGR);
Vec3b data = BGR[0].at<Vec3b>(i,j);
// data[0] -> blue
// data[1] -> green
// data[2] -> red
}
0
我正在使用Ubuntu 12.04和OpenCV 2
我写了以下代码:
问题是我在数据变量中得到了负值和非常大的值。我想我在某个地方犯了一些错误。能否请您指出。
我一直在阅读文档(我还没有完全读完它。.它相当大。)但是从我阅读的内容来看,这应该可行。但这不是。这是怎么了?