求灰度图像最大灰度,最小灰度,平均灰度
2014-12-14 08:24
316 查看
首先在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中好像没有库函数来直接实现。有待发现。
相关文章推荐
- MATLAB图像处理_统计最大/最小/平均灰度
- matlab练习程序(求灰度图像最大灰度,最小灰度,平均灰度)
- MATLAB - 练习程序,求灰度图像均值、最大、最小数值
- 达内实训—第二天小练习(输入班级成绩 求平均分数 最大分数 最小分数)
- Java常识求阶层!的和 ,获取某个数组中的最小值,定义数组,获得成绩之和,平均成绩,最小成绩,最大成绩。等问题大全
- 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
- 使用nmon监控得出网络实时速度以及最大、最小、平均网络传送速度
- 求图像矩阵的最大像素或者最小像素
- 2014多校1009--hdu4968--Improving the GPA(平均成绩的最大最小平均学分)
- python spark 求解最大 最小 平均
- 2、图像灰度变换,加法减法乘法除法差异最大处理
- Awk实现求和、平均、最大值和最小值的计算操作
- lumbda表达式的几个例子(lumbda对集合遍历、过滤、转换、合并、创建、最大、最小、平均、总和值、并行流、将数组转换成流)
- awk实现求和、平均、最大值和最小值的计算操作
- java中数组求最大值,最小值,中和,平均
- 修改weblogic 最大、最小、平均内存值
- awk实现求和、平均、最大值和最小值的计算操作
- oracle 中的几个函数AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合)
- C语言练习题每练 4 求数组平均,最大,最小数