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

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

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

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

#include <opencv2/imgproc/imgproc.hpp> //头文件
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
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<uchar>(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 <iostream>
#include <opencv2/opencv.hpp>  //头文件
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<uchar>(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 <<endl
		<< "width = " << width << endl
		<< "channels = " << channels << endl;

	// 【2】显示载入的图片
	imshow("【原始图】",srcImage);
	// 【3】等待任意按键按下
	waitKey(0);
}  

 

  • 25
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值