使用mat.at方法获取像素值

我们只要使用的图像多为三通道和单通道。

对于三通道来说,每一个像素的位置内含了三个uchar数据,所以对三通道获取像素值要使用Vec3b。Vec3b实质上是一个uchar的数组,最多能装三个数据。

对于单通道,可以直接使用mat.at(row,col)即可获取像素值。

三通道图像读取像素值的代码如下:

 

int main()
{
	Mat src = Mat::zeros(5, 5, CV_8UC3);//建立一个三通道的图像
	cout << "src"<(2, 2);//获取(2,2)位置的像素值,这里用了mat.at(2,2),返回一个Vec3b类型的数组
	cout << "i" << endl << i << endl;
	int a = (int)i[0];//因为Vec3b是uchar型,i[0]中是\0,就是空格。这里要转换为int
	cout << a << endl;
	waitKey(0);
	return 0;
}

单通道的图像读取像素值的代码如下:

 

 

int main()
{
	Mat src = Mat::zeros(5, 5, CV_8UC1);//建立一个三通道的图像
	cout << "src"<(2, 2);//获取(2,2)位置的像素值,这里用了mat.at(2,2),返回一个Vec3b类型的数组
	cout << "i" << endl << (int)i << endl;//i是uchar型,是\0,即空格,无法在doc中显示,所以使用int强制转换。
	waitKey(0);
	return 0;
}

最后,这种方法访问速度很慢,使用mat.ptr(i,j)(单通道) mat,ptr(i,j) (3通道)会快很多

 

 

 

 

 

 

你可能感兴趣的:(Opencv)