求灰度图像最大灰度,最小灰度,平均灰度

首先在Matlab中,我们可以用自带的图像处理函数,实现这种简单灰度的提取功能,也可以自己实现。下面贴出代码。
clear all;clc;

str = pwd;
index_dir = findstr( str, '\' );
str_temp = str( 1 : index_dir(end) );
filename = strcat( str_temp, '3_自制图片库\lena.bmp');

img = imread(filename);
imshow(img);

disp('------------调用matlab库函数--------------------');
%求最大灰度值
Max = max(max(img));
%求最小灰度值
Min = min(min(img));
%求平均灰度值
Avg = mean(mean(img));

fprintf('Max = %d\nMin = %d\nAvg = %f\n', Max, Min, Avg);

disp('--------------以下自己实现----------------------');
%%下面程序速度慢很多
[m, n] = size(img);
ma = 0;
mi = 255;
av = 0;
sum = 0;   % matlab中默认为double类型
for i = 1 : m
    for j = 1 : n
        if img(i, j) > ma
            ma = img(i, j);
        end
        if img(i, j) < mi
            mi = img(i, j);
        end
        sum = sum + double( img(i, j) );   % 注意这里:matlab中    double + uint8 = uint8  所以不做转换的话,数据会溢出 
    end
end
av = sum / (m * n);
fprintf('Max = %d\nMin = %d\nAvg = %f\n', ma, mi, av);

程序所用灰度图片:


下面是运行结果

------------调用matlab库函数--------------------
Max = 245
Min = 25
Avg = 124.042511
Time = 0.007000
--------------以下自己实现----------------------
Max = 245
Min = 25
Avg = 124.042511
Time = 3.539000

从时间运行上来看,自己实现的函数会慢很多,因为没有用到matlab语言的向量化编程,所以推荐使用第一种调用库函数的方法。



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面简单用Opencv实现一下,也很简单:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char **argv)
{
	Mat img = imread("lena.bmp");

	if( img.empty() )
	{
		cout<< "找不到图像文件"<< endl;
		return -1;
	}

	if( img.channels() == 3 )
		cvtColor(img, img, CV_RGB2GRAY );

	int max = 0;
	int min = 255;
	double sum = 0;
	double avg = 0;

	double t = (double)getTickCount();   //计时开始
	for( int i = 0; i < img.rows; i++ )
	{
		for( int j = 0; j < img.cols; j++ )
		{
			//img.at<Vec3b>(i,j)[0]= 255;
			//img.at<Vec3b>(i,j)[1]= 255;
			//img.at<Vec3b>(i,j)[2]= 255;

			if ( img.at<uchar>(i, j) > max )
				max = img.at<uchar>(i, j);

			if ( img.at<uchar>(i, j) < min )
				min = img.at<uchar>(i, j);

			sum += img.at<uchar>(i, j);
		}
	}

	avg = sum / ( ( img.rows) * (img.cols) );
	t = ((double)getTickCount() - t)/getTickFrequency();  //计时结束

	cout<< "Max = "<< max<< endl;
	cout<< "Min = "<< min<< endl;
	cout<< "Avg = "<< avg<< endl;
	cout << "Times passed in seconds: " << t << endl;

	imshow("lena", img);

	waitKey();
	return 0;
}


运行结果:

Max = 245
Min = 25
Avg = 124.043
Times passed in seconds: 0.104919

从运行结果看:opencv必Matlab库函数也是慢很多。不过这里opencv中好像没有库函数来直接实现。有待发现。


  • 4
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以使用MATLAB中的imread函数来读取灰度图像。下面是一个示例代码: ``` img = imread('gray_image.jpg'); ``` 其中,'gray_image.jpg'是灰度图像的文件路径,img是读取后的图像矩阵。如果灰度图像是在当前MATLAB工作目录下,则可以直接输入文件名,如下所示: ``` img = imread('gray_image.jpg'); ``` 如果图像不在当前工作目录下,则需要输入完整的文件路径,如下所示: ``` img = imread('C:\Users\username\Documents\gray_image.jpg'); ``` 读取后的图像矩阵是一个二维数组,表示图像中每个像素的灰度值。可以使用imshow函数将图像显示出来,如下所示: ``` imshow(img); ``` ### 回答2: 在Matlab中,要读取灰度图像,可以使用imread函数。imread函数可以读取多种图像格式,包括灰度图像。下面是一个简单的示例代码: ```matlab % 读取灰度图像 grayImage = imread('image.jpg'); % 显示灰度图像 imshow(grayImage); % 等待用户关闭窗口 waitfor(gcf); % 获取灰度图像的尺寸 [height, width] = size(grayImage); % 计算灰度图像的像素总数 pixels = height * width; % 获取灰度图像最大像素值和最小像素值 maxPixel = max(grayImage(:)); minPixel = min(grayImage(:)); % 获取灰度图像平均像素值和标准差 meanPixel = mean(grayImage(:)); stdDev = std(double(grayImage(:))); % 输出相关信息 disp(['灰度图像的尺寸:', num2str(height), ' × ', num2str(width)]); disp(['灰度图像最大像素值:', num2str(maxPixel)]); disp(['灰度图像最小像素值:', num2str(minPixel)]); disp(['灰度图像平均像素值:', num2str(meanPixel)]); disp(['灰度图像的标准差:', num2str(stdDev)]); ``` 这段代码首先使用imread函数读取名为'image.jpg'的灰度图像,然后使用imshow函数显示图像。之后,代码等待用户关闭显示的窗口。接下来,代码获取图像的尺寸,计算像素总数,获取最大像素值和最小像素值,计算平均像素值和标准差,并输出这些信息。 需要注意的是,要根据具体的图像文件名和路径修改代码中的'imread'和'imshow'函数的输入参数。 ### 回答3: Matlab可以使用imread函数来读取灰度图像。imread函数的语法如下: I = imread(filename) 其中,filename是要读取的图像文件的路径和名称。I是一个矩阵,表示读取的图像数据。 如果图像灰度图像,那么I将是一个二维矩阵,每个元素表示一个像素的灰度值灰度值范围通常是0到255,其中0表示黑色,255表示白色。 读取灰度图像的示例代码如下: I = imread('image.jpg'); 其中,image.jpg是要读取的图像文件的路径和名称。读取后的图像数据将存储在I变量中。 读取灰度图像的同时,可以利用imread函数的第二个输出参数来指定图像的格式。常用的图像格式有'jpg'、'png'和'bmp'等。 如果要读取多幅灰度图像,可以将多个文件名作为输入参数,并用cell(单元数组)或者结构体来存储多个图像数据。 需要注意的是,在使用imread函数时,需要确保图像文件的路径和名称是正确且存在的。此外,如果图像文件的格式不支持,或者图像文件存在损坏等问题,imread函数可能会读取失败。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值