opencv读取图像的灰度值并显示出来

       通过双层循环,遍历所有的像素值,再输出灰度值即可。图片太大,所有只选择20行和20列进行输出。

        昨天要用到图片的灰度值,脑子突然短路了,忘了存储灰度图的数组,存放的就是图片的灰度值,还以为要用什么函数才能读取图片的灰度值,忙活了半天,瞎忙活,主要问题还是在对图片的处理不够熟悉。

       我写了两个,第一个就是遍历所有像素点,输出灰度图矩阵存储的每个像素点的灰度值。第二个是带有输出图片的行、列以及通道数的小程序,顺便也输出一下灰度值。不想把他们整合到一起了,就都放这边,供大家参考学习。

#include  //头文件
#include 
#include 
#include 
using namespace cv; //包含cv命名空间
using namespace std;

int main()
{
	// 【1】读入一张图片
	Mat srcImage = imread("1.jpg",0),dstImage;
	dstImage = srcImage.clone();
	int rowNumber = dstImage.rows;    //行数
	int colNumber = dstImage.cols*dstImage.channels();   //列数*通道数=每一行元素的个数

	for(int i = 0; i < 20; i++)  //行循环,可根据需要换成rowNumber
	{
		uchar* data = dstImage.ptr(i);  //获取第i行的首地址
		for(int j = 0; j < 20; j++)  //列循环,同理
		{
			int intensity = data[j];
			cout << intensity << " " ;
		}
		cout << endl;
	}

	//cvtColor(srcImage,dstImage,CV_BGR2GRAY);
	// 【2】在窗口中显示载入的图片
	//imshow("效果图",dstImage);
	// 【3】等待按任意键窗口自动关闭
	waitKey();

	return 0;
}

//==================================================================================

#include 
#include   //头文件
using namespace cv;  //包含cv命名空间
using namespace std;

void main( )
{    
	// 【1】读入一张图片,载入图像
	Mat srcImage = imread("1.jpg", 0);

	int width,height,channels;
	height = srcImage.rows;
	width = srcImage.cols;
	channels = srcImage.channels();

	for(int i = 0; i < height; i++)
	{
		uchar* data = srcImage.ptr(i);
		for(int j = 0; j < width; j++)
		{
			//uchar val = ((uchar *)(srcImage.data + i * srcImage.step))[j];
			printf("gray value = %d\n",data[j]);
		}
		//printf("\n");
	}


	cout << "height = " << height <

 

你可能感兴趣的:(opencv)