直方图编程

合集下载

用Excel与Mapgis处理化探数据与直方图编程

用Excel与Mapgis处理化探数据与直方图编程

用Excel及Mapgis处理化探数据1、软件要求:Microsoft Office Excel 2003及MAPGIS672、参考资料:如何利用Excel处理化探数据,应用MAPGIS制作地球化学图单元素异常图及综合异常图3、Excel准备工作:①在化探找矿工作中 ,大量数据的处理是一项重要的前期基础工作 ,数据处理的及时、准确与否 ,将直接涉及到下一步勘查工作的部署。

作者在本文中以 Microsoft Office XP Excel工具~数据分析功能为工具 ,简述了这些功能在化探数据处理当中的一些应用。

缺省的 Windows Professional XP一般不安装用来数据处理所需要的数理统计功能 ,故需重新加载 ,步骤如下:工具 -加载宏 -分析工具库 -确定。

之后 ,还需检查在工具菜单下有无数据分析选项。

在大量数据的录入过程中 ,可以设定工具 -语音选项。

在某个数据输入完毕之后 ,按 Enter键即可语音朗读 (需要音响或耳麦 ) ,这样可以实现数据录入的同步检查 ,确保录入数据的准确性。

②数据的处理正态性检验数据是否服从正态分布(或对数正态分布)是化探数据处理的一个重要前提条件,因此必须先进行数据正态性检验。

4、Excel操作步骤:1)、Excel2003准备:把测试数据及样号坐标整理为下图所示2)、打开:①工具——数据分析——描述统计(如下图)②再点确定如下图(Au的数据统计)③再点确定如下图(Au的数据统计)这样就可以得出一系列所需数据,但经验算该组数据为非正态分布,不能做进一步计算,但此为计算流程。

5、MAPGIS操作步骤:1)、首先将Excel数据复制粘贴为记事本格式(.TXT格式)2)打开Mapgis如下①、选择②、Grd模型——离散数据网格化③、打开(做Au图)选择数据列D(X、Y、Z)—网格化方法M(按不同数据选择不同网格化)—输出网格文件名F(存储数据的位置)—确定。

④、选择打开上面保存的⑤、打开⑥、确定(如下图)⑦、选择文件—数据存储于—点数据文件、线数据文件、区数据文件(以上点线区文件保存完毕,以下就是用Mapgis正常编辑)⑧修改要编辑的项目化探直方图制图软件的编程方法2008-12-21 23:36软件采用VB+MAPGIS SDK 开发数据载入格式: CSV文本文件,内容为包含分区编码的元素分析数据分区编码与元素代号均采用MAPGIS的书写方式如C1表示为C#-1,以便成图时正确显示。

直方图的绘制及其解读

直方图的绘制及其解读

直方图的绘制及其解读直方图是一种常用的统计图表,用于展示数据的分布情况。

通过直方图,我们可以直观地了解数据的分布规律,找出数据的特点和规律。

本文将介绍直方图的绘制方法以及如何解读直方图。

一、直方图的绘制方法1. 收集数据:首先需要收集需要展示的数据,确保数据的准确性和完整性。

2. 分组数据:将数据按照一定的区间进行分组,通常将数据分成若干个组,每个组的数据范围相等。

3. 绘制坐标轴:在纵轴上标注频数或频率,在横轴上标注数据的分组区间。

4. 绘制矩形条:根据每个数据组的频数或频率,在相应的区间上绘制矩形条,矩形条的高度表示数据的频数或频率。

5. 添加标题和标签:在图表上方添加标题,标明数据的主题,同时在坐标轴上添加标签,说明数据的含义。

6. 美化图表:可以根据需要添加网格线、颜色填充等,使图表更加美观和易于理解。

二、直方图的解读方法1. 数据分布:通过直方图可以直观地看出数据的分布情况,了解数据的集中程度和离散程度。

2. 数据趋势:观察直方图的形状可以发现数据的趋势,如是否存在峰值、对称性等。

3. 数据比较:可以通过直方图比较不同数据集之间的分布情况,找出数据之间的差异和联系。

4. 异常值:直方图可以帮助我们找出数据中的异常值,即与其他数据差异较大的数值。

5. 预测趋势:通过直方图可以预测未来数据的趋势,帮助我们做出合理的决策和规划。

三、直方图的应用领域1. 经济学:直方图可以用来展示不同地区的经济发展水平,帮助政府制定相关政策。

2. 医学:直方图可以用来展示不同年龄段人群的健康状况,帮助医生进行诊断和治疗。

3. 环境科学:直方图可以用来展示不同地区的环境污染情况,帮助环保部门采取相应措施。

4. 教育学:直方图可以用来展示学生的学习成绩分布情况,帮助老师进行个性化教学。

5. 市场营销:直方图可以用来展示不同产品的销售情况,帮助企业调整营销策略。

通过以上介绍,相信大家对直方图的绘制方法和解读技巧有了更深入的了解。

plot在python中的用法

plot在python中的用法

文章标题:深度探讨Python中plot的用法与实践一、引言在Python编程中,plot是一个常用的函数,它可以用于绘制图表和可视化数据,是数据分析和科学计算中不可或缺的工具之一。

本文将深入探讨plot在Python中的用法,重点介绍其功能和实践应用,帮助读者更全面地了解和掌握这一重要的工具。

二、plot的基本用法在Python中,plot函数主要由matplotlib库提供,它能够绘制各种类型的图表,包括折线图、散点图、饼图、直方图等。

在使用plot函数前,需要导入matplotlib库,并在代码中使用import语句将其引入。

1. 折线图折线图是plot函数中最常用的图表类型之一,可以用于展示数据随时间变化的趋势。

通过plot函数的基本用法,可以轻松绘制出各个时间点对应的数据点,并通过设置标签、标题等参数,使图表更具可读性和美观性。

2. 散点图散点图可以展示两个变量之间的关系,通过plot函数的参数设置,可以调整散点的大小、颜色和形状,从而更清晰地展示数据之间的相关性。

散点图还可以用于发现异常值和观察数据集的分布情况。

3. 饼图饼图是一种常用的数据可视化方式,可用于展示不同类别的占比情况。

通过plot函数中的特定参数设置,可以绘制出各类别在总体中所占的比例,并添加标签和图例,使图表更具信息量和美感。

4. 直方图直方图是用于展示数据分布情况的重要图表类型,可以直观地显示数据集中数值的频率分布。

plot函数的灵活运用能够绘制出直方图,并调整柱状图的间距、颜色和透明度,使数据分布更加清晰和易于理解。

三、plot的实践应用除了基本的图表类型外,plot函数还有许多实践应用,例如在数据分析、机器学习和科学研究中的具体应用场景。

下面将以几个实际案例,深入探讨plot在不同领域中的应用。

1. 数据分析在数据分析领域,plot函数被广泛应用于展示数据之间的关系、趋势和分布情况。

通过结合pandas和numpy等库,可以快速进行数据处理和可视化分析,提高数据挖掘和洞察的效率。

python用直方图规定化实现图像风格转换

python用直方图规定化实现图像风格转换

python⽤直⽅图规定化实现图像风格转换以下内容需要直⽅图均衡化、规定化知识均衡化:规定化:直⽅图均衡化应⽤:图像直⽅图均衡化能拉伸灰度图,让像素值均匀分布在0,255之间,使图像看起来不会太亮或太暗,常⽤于图像增强;直⽅图规定化应⽤:举个例⼦,当我们需要对多张图像进⾏拼接时,我们希望这些图⽚的亮度、饱和度保持⼀致,事实上就是让它们的直⽅图分布⼀致,这时就需要直⽅图规定化。

直⽅图规定化与均衡化的思想⼀致,事实上就是找到各个灰度级别的映射关系。

具体实现的过程中⼀般会选⼀个参考图像记为A,找到A的直⽅图与⽬标图像的直⽅图的映射关系,从⽽找到⽬标图像的像素以A为“参考”时的映射关系。

具体实现可参考⽂中链接(看完茅塞顿开)基于python利⽤直⽅图规定化统⼀图像风格参考图像原始图像(第⼀⾏)/处理后的图像(第⼆⾏)源码:import osimport cv2import numpy as npdef get_map(Hist):# 计算概率分布Prsum_Hist = sum(Hist)Pr = Hist/sum_Hist# 计算累计概率SkSk = []temp_sum = 0for n in Pr:temp_sum = temp_sum + nSk.append(temp_sum)Sk = np.array(Sk)# 计算映射关系img_mapimg_map = []for m in range(256):temp_map = int(255*Sk[m] + 0.5)img_map.append(temp_map)img_map = np.array(img_map)return img_mapdef get_off_map(map_): # 计算反向映射,寻找最⼩期望map_2 = list(map_)off_map = []temp_pre = 0 # 如果循环开始就找不到映射时,默认映射为0for n in range(256):try:temp1 = map_2.index(n)temp_pre = temp1except BaseException:temp1 = temp_pre # 找不到映射关系时,近似取向前最近的有效映射值off_map.append(temp1)off_map = np.array(off_map)return off_mapdef get_infer_map(infer_img):infer_Hist_b = cv2.calcHist([infer_img], [0], None, [256], [0,255])infer_Hist_g = cv2.calcHist([infer_img], [1], None, [256], [0,255])infer_Hist_r = cv2.calcHist([infer_img], [2], None, [256], [0,255])infer_b_map = get_map(infer_Hist_b)infer_g_map = get_map(infer_Hist_g)infer_r_map = get_map(infer_Hist_r)infer_b_off_map = get_off_map(infer_b_map)infer_g_off_map = get_off_map(infer_g_map)infer_r_off_map = get_off_map(infer_r_map)return [infer_b_off_map, infer_g_off_map, infer_r_off_map]def get_finalmap(org_map, infer_off_map): # 计算原始图像到最终输出图像的映射关系 org_map = list(org_map)infer_off_map = list(infer_off_map)final_map = []for n in range(256):temp1 = org_map[n]temp2 = infer_off_map[temp1]final_map.append(temp2)final_map = np.array(final_map)return final_mapdef get_newimg(img_org, org2infer_maps):w, h, _ = img_org.shapeb, g ,r =cv2.split(img_org)for i in range(w):for j in range(h):temp1 = b[i,j]b[i,j] = org2infer_maps[0][temp1]for i in range(w):for j in range(h):temp1 = g[i,j]g[i,j] = org2infer_maps[1][temp1]for i in range(w):for j in range(h):temp1 = r[i,j]r[i,j] = org2infer_maps[2][temp1]newimg = cv2.merge([b,g,r])return newimgdef get_new_img(img_org, infer_map):org_Hist_b = cv2.calcHist([img_org], [0], None, [256], [0,255])org_Hist_g = cv2.calcHist([img_org], [1], None, [256], [0,255])org_Hist_r = cv2.calcHist([img_org], [2], None, [256], [0,255])org_b_map = get_map(org_Hist_b)org_g_map = get_map(org_Hist_g)org_r_map = get_map(org_Hist_r)org2infer_map_b = get_finalmap(org_b_map, infer_map[0])org2infer_map_g = get_finalmap(org_g_map, infer_map[1])org2infer_map_r = get_finalmap(org_r_map, infer_map[2])return get_newimg(img_org, [org2infer_map_b, org2infer_map_g, org2infer_map_r]) if __name__ == "__main__":dstroot = './imgs'infer_img_path = './abc.png'infer_img = cv2.imread(infer_img_path)outroot = './out1'infer_map = get_infer_map(infer_img) # 计算参考映射关系dstlist = os.listdir(dstroot)for n in dstlist:img_path = os.path.join(dstroot, n)print(img_path)img_org = cv2.imread(img_path)new_img = get_new_img(img_org, infer_map) # 根据映射关系获得新的图像new_path = os.path.join(outroot, n)cv2.imwrite(new_path, new_img)。

Matlab实现直方图规定化

Matlab实现直方图规定化

Matlab实现直⽅图规定化直⽅图规定化算法分析1. 求出原图的累积概率分布2. 求出规定图的累积概率分布3. 求出原图中每⼀个灰度级累积概率与规定图的累积概率最接近的灰度级4. 根据第3步的⽅法将原图的灰度映射到标准图中距离最近的灰度值伪代码function outputimg = my_histspec(A,B)% 灰度图的直⽅图规定化% 输⼊:A是读⼊的原图,B是读⼊的规定化的标准图% 输出:outputimg是将A规定化到B之后的图像[HA,WA] = 原图的⼤⼩[HB,WB] = 标准图的⼤⼩统计原图灰度级频数统计标准图灰度级频数计算原图灰度级概率计算标准图灰度级概率计算原图灰度级累积概率分布计算标准图灰度级累积概率分布%求原图和标准图的映射关系,找到两个累积概率最接近的灰度级遍历原图的每个灰度级value{j} = 求标准图当前灰度级累积概率与原图所有灰度级累积概率之差的绝对值[temp{j},index(j)] = index中存的是vlaue中最⼩值的下标outputimg = 开辟⼀个和原图⼤⼩⼀致的新矩阵存放规定化后的图像遍历outputimgoutputimg(i,j) = 根据映射关系为每⼀个新矩阵的像素点赋灰度值转换outputimg成uint8数据类型end代码function outputimg = my_histspec(A,B)% 灰度图的直⽅图规定化% 输⼊:A是读⼊的原图,B是读⼊的规定化的标准图% 输出:outputimg是将A规定到B之后的图像[HA,WA] = size(A);[HB,WB] = size(B);PA = imhist(A) / (HA * WA);PB = imhist(B) / (HB * WB);%求累积概率分布for i = 2 : 256PA(i) = PA(i - 1) + PA(i);PB(i) = PB(i - 1) + PB(i);end%求原图和映射图的映射关系,找到两个累积直⽅图距离最近的点for j = 1:256value{j} = abs(PB - PA(j));[temp{j},index(j)] = min(value{j}) %index中存的是最⼩值的下标,temp中存的是最⼩值endoutputimg = zeros(HA, WA);for i = 1:HAfor j = 1:WAoutputimg(i,j) = index(A(i,j) + 1)-1;endendoutputimg = uint8(outputimg);end实验结果%调⽤⽰例:A = imread('pout.tif');B = imread('coins.png');C = my_histspec(A,B);subplot(2,3,1);imshow(A);title('原图');subplot(2,3,2);imshow(B);title('标准图');subplot(2,3,3);imshow(C);title('匹配到标准图后');subplot(2,3,4);imhist(A);title('原图直⽅图');subplot(2,3,5);imhist(B);title('标准图直⽅图');subplot(2,3,6);imhist(C);title('匹配到标准图后直⽅图');实验分析直⽅图均衡化是直⽅图规定化的特例,理想状态下原图直⽅图均衡化和标准图均衡化后对应的直⽅图应该是相等的,通过求得原图累积概率和标准图累积概率最接近的灰度值映射,最后的效果是原图的直⽅图和标准图的直⽅图接近。

二级考试C++实例:单通道图像的直方图

二级考试C++实例:单通道图像的直方图

今天学习opencv中图像的直⽅图,重点研究单通道图像直⽅图⽣成的过程,以下是直⽅图⽣成的代码: #include "cv.h" #include "highgui.h" #include #include int main( int argc, char** argv ) { IplImage *src = 0; IplImage *histimg = 0; CvHistogram *hist = 0; int hdims = 50; // 划分HIST的个数,越⾼越精确 float hranges_arr[] = {0,255}; float* hranges = hranges_arr; int bin_w; float max_val; int i; if( argc != 2 || (src="///img_default_m_show.png" data-echo=cvLoadImage(argv[1], 0)) == NULL) // 强制转为灰度图像 return -1; cvNamedWindow( "Histogram", 0 ); cvNamedWindow( "src", CV_WINDOW_AUTOSIZE); hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); // 计算直⽅图 histimg = cvCreateImage( cvSize(320,200), 8, 3 ); cvZero( histimg ); cvCalcHist( &src, hist, 0, 0 ); // 计算直⽅图 cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); // 只找值 cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); // 缩放 bin 到区间 [0,255] cvZero( histimg ); bin_w = histimg->width / hdims; // hdims: 条的个数,则 bin_w 为条的宽度 // 画直⽅图 for( i = 0; i < hdims; i++ ) { double val = ( cvGetReal1D(hist->bins,i)*histimg->height/255 ); CvScalar color = CV_RGB(255,255,0); //(hsv2rgb(i*180.f/hdims); cvRectangle( histimg, cvPoint(i*bin_w,histimg->height), cvPoint((i+1)*bin_w,(int)(histimg->height - val)), color, 1, 8, 0 ); } cvShowImage( "src", src); cvShowImage( "Histogram", histimg ); cvWaitKey(0); cvDestroyWindow("src"); cvDestroyWindow("Histogram"); cvReleaseImage( &src ); cvReleaseImage( &histimg ); cvReleaseHist ( &hist ); return 0; }。

VBA实现Excel的数据统计与分布分析

VBA实现Excel的数据统计与分布分析

VBA实现Excel的数据统计与分布分析Excel是一款功能强大的电子表格软件,可以用来处理和分析大量的数据。

借助Excel的VBA编程功能,我们可以更加高效地实现数据的统计和分布分析。

本文将介绍如何利用VBA编写代码,实现Excel 的数据统计和分布分析功能。

一、数据统计数据统计是对大量数据进行整理、分析和总结,以便更好地理解数据和提取有用信息。

通过Excel的VBA编程,我们可以实现以下常见的数据统计功能:1. 计数计数是对某个范围内的数据进行计数的操作。

在VBA中,我们可以使用Count函数来实现计数操作,例如:```vbaSub CountData()Dim rng As RangeDim countResult As Long'选择需要统计的范围Set rng = Range("A1:A10")countResult = Application.WorksheetFunction.Count(rng)'将结果输出到指定单元格Range("B1").Value = countResultEnd Sub```上述代码中,我们首先利用Set语句选择需要统计的范围,然后使用Count函数计算出范围内的数据个数,并将结果输出到指定的单元格。

2. 求和求和是对某个范围内的数据进行求和的操作。

在VBA中,我们可以使用Sum函数来实现求和操作,例如:```vbaSub SumData()Dim rng As RangeDim sumResult As Double'选择需要求和的范围Set rng = Range("A1:A10")sumResult = Application.WorksheetFunction.Sum(rng)'将结果输出到指定单元格Range("B1").Value = sumResultEnd Sub```上述代码中,我们同样首先利用Set语句选择需要求和的范围,然后使用Sum函数计算出范围内的数据总和,并将结果输出到指定的单元格。

直方图课程设计

直方图课程设计

直方图课程设计一、教学目标本节课的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握直方图的定义、制作方法和用途。

技能目标要求学生能够独立制作直方图,并能够通过直方图分析数据分布的特点。

情感态度价值观目标要求学生培养对数据分析的兴趣,意识到数据分析在实际生活中的重要性。

本节课的性质是实践性课程,学生特点为对数据分析感兴趣,具备一定的数学基础。

教学要求是让学生通过实际操作,掌握直方图的制作方法和分析技巧。

将目标分解为具体的学习成果,学生能够理解直方图的概念,学会制作直方图,并能运用直方图分析数据。

二、教学内容本节课的教学内容主要包括直方图的定义、制作方法和用途。

首先,介绍直方图的定义,让学生了解直方图是一种用来展示数据分布的图形。

然后,讲解直方图的制作方法,包括收集数据、分组、计算频率等步骤。

最后,介绍直方图的用途,如通过直方图可以直观地了解数据的集中趋势和离散程度。

教材的章节为第四章节,具体内容包括直方图的定义、制作方法和用途。

三、教学方法为了激发学生的学习兴趣和主动性,本节课采用多种教学方法。

首先,采用讲授法,讲解直方图的定义、制作方法和用途。

其次,采用案例分析法,通过分析实际案例,让学生学会如何运用直方图分析数据。

然后,采用实验法,让学生亲自动手制作直方图,加深对直方图的理解。

最后,采用讨论法,鼓励学生之间互相交流,分享制作直方图的心得。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,本节课准备了一系列教学资源。

教材为《数据分析与应用》,参考书为《统计学原理》。

同时,利用多媒体资料,如图片、视频等,为学生提供直观的学习材料。

此外,准备实验设备,如纸张、剪刀、彩笔等,让学生动手制作直方图。

五、教学评估本节课的教学评估方式包括平时表现、作业和考试三个部分。

平时表现主要评估学生在课堂上的参与程度、提问回答等情况,通过观察学生的表现来了解他们的学习状态。

作业主要评估学生对课堂所学知识的掌握程度,通过学生提交的作业来判断他们的学习效果。

初中数学 如何绘制数据的直方图

初中数学  如何绘制数据的直方图

初中数学如何绘制数据的直方图绘制数据的直方图是一种常用的可视化方法,用于展示一组数据的分布情况。

直方图将数据分成若干个区间,并统计每个区间内数据的数量或频数,然后将这些统计结果绘制成柱状图。

下面将详细介绍如何绘制数据的直方图。

假设有一组数据集,数据依次为x1, x2, x3, ..., xn,其中n 表示数据的数量。

绘制数据的直方图的步骤如下:1. 确定区间(Bins):首先,需要确定将数据分成多少个区间。

区间的数量可以根据数据的范围和数据的数量来决定。

一般来说,区间的数量可以选择为5 到20 之间。

较少的区间数量可能导致数据的分布信息不够细致,而较多的区间数量可能导致图形过于拥挤。

2. 计算区间宽度(Bin Width):根据数据的范围和确定的区间数量,可以计算出每个区间的宽度。

区间宽度可以通过将数据的范围除以区间数量来得到。

如果数据的范围较大,可以选择适当的方式进行范围缩放,以便更好地展示数据的分布情况。

3. 创建区间(Bins):按照确定的区间宽度,将数据分成若干个区间。

每个区间的上下限可以通过选择数据的最小值和最大值,然后根据区间宽度依次增加或减少来确定。

确保每个数据点都被分到一个区间中。

4. 统计频数(Frequency):统计每个区间内数据的数量或频数。

遍历数据集,对于每个数据点,确定它属于哪个区间,然后将该区间的频数加一。

5. 绘制直方图:使用柱状图来展示每个区间的频数。

横轴表示区间,纵轴表示频数。

每个区间的柱子的高度表示该区间的频数。

可以选择在柱状图上添加区间边界的标签,以便更清楚地展示每个区间的范围。

需要注意的是,直方图是用来展示连续型数据的分布情况,对于离散型数据不适用。

同时,直方图也可以用来比较不同数据集的分布情况,通过将多个数据集的直方图绘制在同一张图上进行对比分析。

绘制直方图时,可以使用各种数据可视化工具和软件,如Excel、Python 的Matplotlib 库、R 语言等。

自行编写代码计算灰度图像的直方图

自行编写代码计算灰度图像的直方图

数字图像处理实验报告姓名:___王程___学号:_2012021199037_日期:_2013.3.19_ 一、实验要求(1)自行编写代码计算灰度图像的直方图,自行编写代码,不用matlab里面的直方图函数。

(2)用matlab读取和显示二、实验代码function ladylenna()a=imread('C:\lenna.jpg'); %读取图像至工作空间imfinfo('C:\lenna.jpg') %查看图像信息subplot(2,2,1);imshow(a);title('lady-lenna');if isrgb(a);b=rgb2gray(a); %RGB转换为灰度图像endsubplot(2,2,2);imshow(b); %显示图像title('ladygaga-lenna');[m,n]=size(a); %返回图像大小e=zeros(1,256);for k=0:255for i=1:mfor j=1:nif a(i,j)==ke(k+1)=e(k+1)+1; %灰度值相同的进行累加endendendendsubplot(2,2,4);bar(e); %画图像的灰度直方图title('灰度直方图');c=imrotate(a,20); %图像的旋转subplot(2,2,3);imshow(c);三、实验结果截图并做分析分析:第一幅图,lady-lenna是用imread函数读入,imshow显示为彩色图像。

第二幅图,ladygaga-lenna为变换后的灰度图,运用函数rgb2gray。

第三幅图是对原图像进行旋转所得,运用函数imrotate。

最后一幅为灰度直方图,采用自编函数。

小结:实验中由于必须使用自编函数,所以没有用到hist函数。

本次实验程序是在M文件中编写运行和调试的,在实验中开始由于没有用到函数rgb2gray,所以得到的结果有些出入。

编程实现直方图均衡化

编程实现直方图均衡化

编程实现直方图均衡化一、实验目的掌握直方图均衡化的原理,和其步骤,了解直方图均衡化的作用、效果。

二、实验要求实现对任意图像进行直方图均衡化。

三、实验原理1.直方图均衡化:对原始图像的像素灰度做某种映射变换,使变换后图像直方图的概率密度呈均匀分布,即变换后图像的灰度级均匀分布。

2. 步骤:(1).统计原图像每一灰度级的像素数和累积像素数。

(2).计算每一灰度级xa均衡化后对应的新值,并对其四舍五入取整,得到新灰度级xb。

(3).以新值替代原灰度值,形成均衡化后的新图像。

(4).根据原图像像素统计值对应找到新图像像素统计值,作出新直方图。

四、实验思路五、 实验步骤1.新建项目文件:本实验选用的语言是C#,开发工具是VisualStudio2010,通过“文件—新建—项目—C#—Windows 窗体应用程序”,命名“直方图均衡化”即可;2.编写代码:由实验思路中的思维导图可得知,本实验步骤与“绘制直方图实验非常类似”,只是中间加了对原始图像灰度值统计数据进行了均衡化处理这一步骤,因此,只需在它的基础上进行改动和添加部分代码即可,具体如下:(1).编写头文件读取代码:由于以前的实验已有该代码,那么只需,导入其所在的“.cs ”类文件即可;(2).编写读取图像灰度值代码:将“绘制任意图像灰度值”实验该部分功能“.cs ”类文件导入即可;(3).编写统计灰度值代码:载入该功能所在“.cs ”类文件即可;(4).编写直方图均衡化代码:由实验原理里的直方图均衡化步骤可知它对应的代码部分应该有:统计像素累计数,这个只需利用已有的灰度值及其频数所在的Hashtable 哈希表数据即可;将原始灰度级映射到新的值,只需编写一个 对应方法,再对新的灰度级频数进行统计即可,具体代码将后文;(5).编写绘制直方图代码:导入已有的代码所在“.cs ”类文件即可。

3.编译与调试:通过VS2010断点等调试工具,可查看、排除程序错误,无语法、逻辑错误后,编译生成程序文件即可;4.运行程序查看结果:运行程序,加载实验数据,查看绘制出的直方图,然后再通过ENVI 的“Enhance-Interactive Stretching ”工具选择“SretchType ”为“Equalization ”执行后显示的直方图对比,看是否准确;六、 结果与分析1. 结果程序界面()01kja a j L h x N =-∑2.分析在对灰度级进行映射转换时一定要进行四舍五入运算,否则会有误差。

频率分布直方图

频率分布直方图

频率分布直方图频率分布直方图是一种用于展示数据分布情况的图表。

它通过将数据的范围划分为若干个区间,然后统计每个区间内数据的个数或频率,最后将这些频率绘制成矩形条来表示数据的分布。

本文将详细介绍频率分布直方图的概念、制作步骤以及如何解读直方图。

一、频率分布直方图的概念频率分布直方图是统计学中常用的一种图表,通过直观地展示数据的频率分布情况,帮助我们更好地理解数据。

它将数据的范围分成若干个区间,然后统计每个区间内数据的频率或个数,最后将这些频率绘制成矩形条,并将矩形条排列在一条水平轴上。

频率分布直方图通常由两个轴组成,一个是水平轴,表示数据的范围;另一个是垂直轴,表示频率或个数。

每个矩形条的高度代表相应区间内数据的频率或个数。

通过观察直方图的形状、峰度、对称性等特征,我们可以了解数据的分布情况。

制作频率分布直方图的步骤如下:1、确定数据的范围,并将其分成若干个区间。

2、统计每个区间内数据的频率或个数。

3、确定矩形条的高度,即频率或个数。

4、绘制矩形条,并将其排列在一条水平轴上。

5、添加坐标轴、标题以及其他标注。

二、频率分布直方图的制作下面以某城市的年龄分布为例,来说明如何制作频率分布直方图。

步骤一:确定数据的范围,并将其分成若干个区间。

假设我们有一组包含1000个人的数据,表示他们的年龄。

我们想要了解这些人的年龄分布情况,因此需要确定数据的范围。

假设数据的最小值为20岁,最大值为70岁,我们将其分成10个区间,每个区间宽度为5岁。

步骤二:统计每个区间内数据的频率或个数。

根据数据的范围和区间宽度,我们对数据进行统计,计算出每个区间内数据的频率或个数。

假设统计结果如下所示:区间频率20-24 5025-29 10030-34 15035-39 20040-44 25045-49 20050-54 15055-59 10060-64 5065-69 50步骤三:确定矩形条的高度,即频率或个数。

根据统计结果,我们可以确定每个矩形条的高度。

直方图的绘制及其解读

直方图的绘制及其解读

直方图的绘制及其解读直方图是一种常用的统计图表,用于展示数据的分布情况。

它通过将数据分成若干个区间,并统计每个区间内数据的频数或频率,然后将这些统计结果以柱状图的形式呈现出来。

直方图的绘制和解读对于数据分析和决策具有重要意义。

本文将介绍直方图的绘制方法,并解读直方图的几个重要特征。

一、直方图的绘制方法绘制直方图的步骤如下:1. 确定数据的范围和区间:首先需要确定数据的范围,即最小值和最大值,然后根据数据的范围确定合适的区间数目。

通常情况下,区间数目的选择应该使得每个区间内的数据数量大致相等,以便更好地展示数据的分布情况。

2. 划分区间并统计频数或频率:根据确定的区间数目,将数据划分到各个区间中,并统计每个区间内数据的频数或频率。

频数是指落在某个区间内的数据的个数,频率是指落在某个区间内的数据的个数与总数据个数的比值。

3. 绘制柱状图:在纵轴上表示频数或频率,在横轴上表示区间,绘制柱状图。

每个柱子的高度表示该区间内数据的频数或频率。

二、直方图的解读直方图可以通过观察柱状图的形状、峰度、偏度等特征来解读数据的分布情况。

以下是几个常见的直方图特征及其解读:1. 对称分布:如果直方图呈现出对称的形状,即左右两侧的柱子大致相等,那么数据呈现出对称分布。

对称分布通常表示数据的均值和中位数相等,且数据的分布相对均匀。

2. 正偏分布:如果直方图呈现出右偏的形状,即右侧的柱子较高,左侧的柱子较低,那么数据呈现出正偏分布。

正偏分布通常表示数据的均值大于中位数,且数据的分布相对集中在较小的数值上。

3. 负偏分布:如果直方图呈现出左偏的形状,即左侧的柱子较高,右侧的柱子较低,那么数据呈现出负偏分布。

负偏分布通常表示数据的均值小于中位数,且数据的分布相对集中在较大的数值上。

4. 峰度:峰度是指直方图的峰值的高度和陡峭程度。

如果直方图的峰度较高,表示数据的分布相对集中,峰值较尖锐;如果直方图的峰度较低,表示数据的分布相对分散,峰值较平缓。

直方图的使用技巧

直方图的使用技巧

直方图的使用技巧直方图是一种常用的数据展示方式,它可以用于展示数据在不同范围内的分布情况,帮助我们更好地理解数据的特征和分布规律。

在使用直方图时,我们可以注意以下几个技巧:1. 确定数据类型:在使用直方图之前,需要先确定数据的类型是离散型还是连续型。

对于连续型数据,我们需要将其分成若干个不重叠的区间,并统计每个区间内的数据个数;对于离散型数据,直接统计每个数据的频数即可。

2. 确定区间个数:对于连续型数据,我们需要确定将数据分成多少个区间。

一般情况下,选择适当的区间个数可以更好地展示数据的特征,避免信息的丢失。

常用的确定区间个数的方法有经验法则、统计法则和直观法则等。

例如,Sturges 公式和Freedman-Diaconis公式都是常用的计算区间个数的方法。

3. 选择合适的区间宽度:在确定区间个数后,我们还需要选择合适的区间宽度。

区间宽度的选择也会影响到数据展示的效果。

如果区间宽度太大,可能会导致数据的分布不够清晰;如果区间宽度太小,可能会导致过度细化,使得直方图过于复杂。

一般情况下,可以根据数据的范围和数量来选择合适的区间宽度。

4. 设置合适的纵轴刻度:在绘制直方图时,纵轴刻度的设置也非常重要。

纵轴代表的是频数或者频率,我们需要选择合适的刻度来使得数据的分布情况能够清晰地展示出来。

通常可以选择一定数量的刻度值,使得直方图的纵轴范围能够包含所有的数据。

5. 添加标签和标题:在完成直方图的绘制后,我们还可以添加标签和标题,使得数据的含义更加明确。

例如,我们可以给每个直方条添加标签,表示当前区间的范围;还可以给整个图形添加标题,概括地描述数据的分布情况。

6. 注意直方图的背景数据:在使用直方图时,我们需要注意直方图的背景数据,以免出现误导。

背景数据指的是在绘制直方图时所使用的坐标系等其他信息。

例如,绘制高度为频数的直方图时,纵轴可能被默认为频数,并没有进行明确的标注。

我们需要注意这些背景数据,并对其进行适当的修改,确保直方图的含义能够被准确理解。

直方图的制作详细步骤讲解

直方图的制作详细步骤讲解

直方图(Histogram)一、前言现场工作人员经常都要面对许多的数据,这些数据均来自于生产过程中抽样或检查所得的某项产品的质量特性。

如果我们应用统计绘图的方法,将这些数据加以整理,则生产过程中的质量散布的情形及问题点所在及过程、能力等,均可呈现在我们的眼前;我们即可利用这些信息来掌握问题点以采取改善对策。

通常在生产现场最常利用的图表即为直方图。

二、直方图的定义⒈什么是直方图:即使诸如长度、重量、硬度、时间等计量值的数值分配情形能容易地看出的图形。

直方图是将所收集的测定值特性值或结果值,分为几个相等的区间作为横轴,并将各区间内所测定值依所出现的次数累积而成的面积,用柱子排起来的图形。

因此,也叫做柱状图。

⒉使用直方图的目的:⑴了解分配的形态。

⑵研究制程能力或计算制程能力。

⑶过程分析与控制。

⑷观察数据的真伪。

⑸计算产品的不合格率。

⑹求分配的平均值与标准差。

⑺用以制定规格界限。

⑻与规格或标准值比较。

⑼调查是否混入两个以上的不同群体。

⑽了解设计控制是否合乎过程控制。

116 品管七大手法3.解释名词:⑴次数分配将许多的复杂数据按其差异的大小分成若干组,在各组内填入测定值的出现次数,即为次数分配。

⑵相对次数在各组出现的次数除以全部的次数,即为相对次数。

⑶累积次数(f)自次数分配的测定值较小的一端将其次数累积计算,即为累积次数。

⑷极差(R)在所有数据中最大值和最小值的差,即为极差。

⑸组距(h)极差/组数=组距 ⑹算数平均数(X)数据的总和除以数据总数,通常一X (X-bar )表示。

⑺中位数(X)将数据由大至小按顺序排列,居于中央的数据为中位数。

若遇偶位数时,则取中间两数据的平均值。

⑻各组中点的简化值(μ)⑼众数(M)次数分配中出现次数最多组的值。

例:次数最多为24,不合格数是9,故众数为9。

⑽组中点(m)一组数据中最大值与最小值的平均值, (上组界+下组界)÷ 2=组中点第八章 直方图 117 X= X 1+X 2+ …… +X n n X= ∑μf nX 0+h ~ μ= , X i - X 0 组距(h) X 0=次数最多一组的组中点 X i =各组组中点 n Xi ni ∑=1=⑾标准差(σ)⑿样本标准差(S)三、直方图的制作⒈直方图的制作方法步骤1:收集数据并记录收集数据时,对于抽样分布必须特别注意,不可取部分样品,应全部均匀地加以随机抽样。

直方图知识点总结归纳

直方图知识点总结归纳

直方图知识点总结归纳一、直方图的基本概念1. 频率和频数:直方图的纵坐标通常代表频率或频数。

频率是指数据在某个区间的出现次数除以样本容量的比例,而频数是指数据在某个区间的出现次数。

2. 区间:直方图的横坐标代表数据的区间或类别,这些区间可以是数值范围,也可以是数据的分类。

二、绘制直方图的步骤1. 确定数据的区间:首先需要根据数据的范围和分布情况来确定直方图的区间,通常会将数据分成若干个区间或类别。

2. 计算频率或频数:在确定了区间之后,需要统计每个区间内数据的频率或频数。

3. 绘制直方图:根据统计得到的频率或频数,可以用长方形的柱子来表示每个区间的数据分布情况,从而得到直方图。

三、直方图的特点和用途1. 反映数据的分布情况:直方图可以直观地反映数据在不同区间或类别中的分布情况,帮助人们分析数据的集中程度、偏移程度和形状。

2. 比较不同数据集:直方图可以方便地比较两个或多个数据集的分布情况,帮助人们发现数据之间的差异和联系。

3. 发现异常值:通过直方图,可以直观地发现数据中的异常值或离群点,帮助人们识别出数据中的特殊情况。

四、直方图的注意事项1. 区间的选择:确定区间时需要考虑到数据的范围和分布情况,不能因为选择不当而导致直方图无法正确表达数据的分布情况。

2. 纵轴的尺度:纵轴代表频率或频数,需要根据数据的实际情况选择合适的刻度,以便更清晰地展示数据的分布特征。

3. 样本容量:直方图的解释需要结合样本容量来进行,较小的样本容量可能不足以准确反映数据的分布情况。

五、如何解读直方图1. 集中程度:直方图的峰值和柱子的高度可以反映数据的集中程度,峰值越高,数据越集中。

2. 偏移程度:直方图的偏斜情况可以反映数据的偏移程度,偏斜度越大,数据在某一方向的偏移越明显。

3. 分布形状:直方图的形状可以帮助人们判断数据的分布形式,比如是否是正态分布、均匀分布或偏态分布等。

总之,直方图是一种重要的数据可视化工具,它可以帮助人们直观地理解和分析数据的分布情况,为统计学和数据分析提供重要的参考信息。

直方图均衡化的C语言代码

直方图均衡化的C语言代码

直⽅图均衡化的C语⾔代码直接PO代码:1 #include <stdio.h>2 #include <math.h>3 #include "graphics.h"45/*6功能: 在整型数组中找到最⼩值和最⼤值7输⼊: 整型数组;数组⼤⼩;接收最⼩值;接收最⼤值8结果: 得到数组中的最⼩值和最⼤值9*/10void GetMinMaxInt(int *arr, int n, int &min, int &max);11/*12功能: 在浮点型数组中找到最⼩值和最⼤值13输⼊: 浮点型数组;数组⼤⼩;接收最⼩值;接收最⼤值14结果: 得到数组中的最⼩值和最⼤值15*/16void GetMinMaxDouble(double *arr, int n, double &min, double &max);17/*18功能: 打印灰度图19输⼊: 存储灰度图的动态数组;宽;⾼20结果: 图像窗⼝显⽰灰度图21*/22void PrintGrayImage(double *gray_mtx, int w, int h);23/*24功能: 获取输⼊的彩⾊图像,并转为灰度图25输⼊: 图像完整⽂件名;存储图像灰度图的动态数组;宽;⾼;是否在窗⼝打印26结果: 相应图像灰度数据赋值到动态数组mx中(1打印 0不打印)27*/28void GetImageGray(char *file, double *mx, int w, int h, int mode);29/*30功能: 打印灰度直⽅图31输⼊: 存储灰度图的动态数组;宽;⾼32结果: 图像窗⼝打印灰度直⽅图33*/34void ShowHistogram(double *mx, int w, int h);35/*36功能: 直⽅图均衡化37输⼊: 原图像及其尺⼨;输出图像38结果: 对图像进⾏直⽅图均衡化处理39*/40void HistogramEqualization(double *mtx, int w, int h, double *out);4142int main() {43int w=640, h=640;44char file_name[] = "image.jpg";4546 initgraph(w, h, 0);47 setcaption("直⽅图均衡化");4849/* 获取输⼊图像灰度图 */50double *gray_mtx = (double *)malloc(w*h*sizeof(double));51 GetImageGray(file_name, gray_mtx, w, h, 0);5253/* 打印输⼊图像灰度直⽅图 */54// ShowHistogram(gray_mtx, w, h);555657/* 直⽅图均衡化 */58double *out_mtx = (double *)malloc(w*h*sizeof(double));59 HistogramEqualization(gray_mtx, w, h, out_mtx);606162/* 打印处理后的图像 */63 PrintGrayImage(out_mtx, w, h);6465/* 打印处理后图像灰度直⽅图 */66// ShowHistogram(out_mtx, w, h);6768 getch();69free(gray_mtx);70free(out_mtx);71 closegraph();72return0;73 }7475/* 在整型数组中找到最⼩值和最⼤值 */76void GetMinMaxInt(int *arr, int n, int &min, int &max) {77 min = 0x7fffffff;78 max = 0x80000000;79for(int i=0; i<n; i++) {80if(arr[i] > max) max = arr[i];81if(arr[i] < min) min = arr[i];82 }83 }84/* 在浮点型数组中找到最⼩值和最⼤值 */85void GetMinMaxDouble(double *arr, int n, double &min, double &max) {86 min = 1.7976931348623158e+308;87 max = 2.2250738585072014e-308;88for(int i=0; i<n; i++) {89if(arr[i] > max) max = arr[i];90if(arr[i] < min) min = arr[i];91 }92 }939495/* 打印灰度图 */96void PrintGrayImage(double *gray_mtx, int w, int h) {97int i, j, gray;98for(i=0; i<w; i++) {99for(j=0; j<h; j++) {100 gray = *(gray_mtx+h*i+j) * 255.0;101 putpixel(i, j, EGEGRAY(gray));102 }103 }104 }105/* 获取输⼊的彩⾊图像,并转为灰度图 */106void GetImageGray(char *file, double *mx, int w, int h, int mode) { 107 color_t color;108int i, j, red, green, blue, gray;109 PIMAGE pimg = newimage();110 getimage(pimg, file, w, h);111112for(i=0; i<w; i++) {113for(j=0; j<h; j++) {114 color = getpixel(i, j, pimg);115 red = EGEGET_R(color);116 green = EGEGET_G(color);117 blue = EGEGET_B(color);118// 转化为灰度图119 gray = (red*38 + green*75 + blue*15) >> 7;120 *(mx+h*i+j) = gray / 255.0;121// printf("(%d,%d) %lf\n", i, j, gray/255.0);122 }123 }124// 是否打印灰度图像125if(mode) {126 PrintGrayImage(mx, w, h);127 }128 delimage(pimg);129 }130/* 打印灰度直⽅图 */131void ShowHistogram(double *mx, int w, int h) {132int i, gray_level[256]={0}, gl;133for(i=0; i<w*h; i++) {134// 像素点的灰度级计数135 gl = floor(*(mx+i) * 255.0);136 gray_level[gl]++;137 }138// 左上⾓的坐标,坐标轴最⼤像素⾼度,间隔像素点139int dgx=0, dgy=0, dgh=600, ii=1;140int min, max;141 GetMinMaxInt(gray_level, 256, min, max);142int sX, sY, eX, eY;143for(i=0; i<256; i++) {144 sX = dgx + i*(ii+1);145 sY = dgy + dgh;146 eX = dgx + i*(ii+1);147 eY = dgy + dgh-dgh*gray_level[i]/max;148 line(sX, sY, eX, eY);149 }150 }151/* 直⽅图均衡化 */152void HistogramEqualization(double *mtx, int w, int h, double *out) { 153int i, j, sum;154/* 原图像灰度级像素点计数 */155int gray_level[256] = {0};156for(i=0; i<w*h; i++) {157// 像素点的灰度级计数158 gray_level[int(*(mtx+i) * 255.0 + 0.5)]++;159 }160161/* 图像的归⼀化灰度分布及概率 */162double sk=0.0, tmp; // 变换函数163double ia=0.0, ib=1.0/255.0, mid; // 定义两个变量,⽤于寻找最接近的灰度级164/* 像素映射关系(⽤于对图像的像素进⾏处理) */165double corresponding[256];166for(i=0; i<256; i++) {167 tmp = 1.0*gray_level[i]/(w*h);168 sk += tmp;169// 寻找最接近的灰度级170while(sk > ib) {171 ia += 1.0/255.0;172 ib += 1.0/255.0;173 }174 mid = (ia+ib)/2.0;175if(sk > mid) corresponding[i] = ib;176else corresponding[i] = ia;177 }178179/* 图像的直⽅图均衡化转换 */180for(i=0; i<w; i++) {181for(j=0; j<h; j++) {182 *(out+h*i+j) = corresponding[int(*(mtx+h*i+j) * 255.0 + 0.5)];183 }184 }185 }(1)原图:(2)处理前后灰度图对⽐:(3)处理前后灰度直⽅图对⽐:(4)处理前后变换函数图对⽐:。

如何在Excel中创建直方图

如何在Excel中创建直方图

如何在Excel中创建直方图直方图是一种常用的数据可视化工具,用于展示各个数据区间的频率分布情况。

在Excel中创建直方图可以帮助我们更好地理解数据的分布规律和趋势。

本文将介绍如何在Excel中创建直方图,提供详细的步骤和操作指导。

首先,打开Excel软件并创建一个新的工作簿。

在工作簿的一个工作表中,输入待分析的数据。

假设我们有一个数据集,包含一组年龄数据,我们将使用这组数据创建直方图。

接下来,选中数据集,并点击Excel菜单栏中的“插入”选项卡。

在插入选项卡中,可以找到“统计图表”组,其中包括各种图表类型。

在这里,我们需要选择“直方图”图表类型。

选择“直方图”之后,Excel会自动在当前工作表中创建一个新的图表对象,并打开“图表工具”菜单栏。

在“图表工具”菜单栏中,可以进行各种图表设置和样式调整。

接下来,可以通过“图表工具”菜单栏中的“设计”和“布局”选项进行图表样式和布局的调整。

比如,可以修改图表的标题、数据标签、颜色等。

在创建直方图时,我们通常还需要对数据进行分组。

Excel提供了直方图分组的功能。

点击“图表工具”菜单栏中的“设计”选项卡,在“数据”组中找到“数据编辑”命令,点击“选择数据”按钮。

在“选择数据”对话框中,可以选择直方图的输入数据范围和分组方式。

在“X轴标签”中,选择待分析的数据范围。

在“数列”中,可以选择分组方式,比如按照指定区间宽度设置分组。

点击确定后,Excel会自动更新直方图,并根据数据范围和分组方式重新计算频率分布。

创建直方图后,我们可以对图表进行进一步的调整。

比如,可以调整X轴和Y轴的刻度范围、增加图例、设置网格线等。

此外,Excel还提供了其他一些有用的功能,帮助我们更好地分析和解读直方图。

比如,可以通过鼠标点击直方图的某个柱形,查看具体的数据数值和频率分布。

还可以使用Excel的数据透视表和条件格式等功能,对直方图进行更深入的分析。

总结起来,创建直方图的步骤如下:1. 打开Excel并创建新的工作簿。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

昆明理工大学(数字图像处理)实验报告 实验名称: 直方图编程
一、实验目的:
深入理解直方图的概念,学习VC++对话框中图形绘制的基本方法及步骤。

二、实验原理:
直方图是反映图像中灰度级与灰度级出现频率的关系的图形。

直方图的离散表示:
三、实验内容及步骤:
1、 展开Resource 选项中Dialog 项,右键单击该项,
选择Insert Dialog 项,添加一对话框资源,并命名为IDD_ZFT_DIALOG 。

2、 编辑对话框资源,添加一PICTURE 控件,,并分
别设置 ”OK ” button 控件的ID 号为ID_OK ,右键单击对”OK ” button 控件建立类向导。

这时弹出一个adding a class 的对话框,添加一个名为Czft 的类。

选择类名为Cft, 并加入以下消息响应函数编辑代码如下
1
,...2,1,01
0,)(-=≤≤=l k r N n r P k k k
Czft::Czft(CWnd* pParent /*=NULL*/)
: CDialog(Czft::IDD, pParent)
{
//{{AFX_DATA_INIT(Czft)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
for(int i=0;i<256;i++)
a[i]=200;
}
3、在点运算的主菜单中添加一名为直方图的菜单资源,
命名资源ID为IDM_ZFT 。

4、利用类向导添加相应消息响应函数。

void CGsmView::OnZft()
{
// TODO: Add your command handler code here
long w,h;
long i,j;
unsigned char *lp=m_Image;
w=m_DibHead->biWidth;
h=m_DibHead->biHeight;
long h1[256]={0};
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
h1[*(lp+i*w+j)]++;
}
long max=0;
for(i=0;i<256;i++)
{
if(max<h1[i])
max=h1[i];
}
for(i=0;i<256;i++)
h1[i]=h1[i]*200/max;
/*CClientDC mydc(this);
int y0=250;
for(i=0;i<255;i++)
{
mydc.MoveTo(w+i,y0);
mydc.LineTo(w+i,y0-h1[i]);
}*/
Czft mydlg;
memcpy(mydlg.a,h1,256*sizeof(int));
mydlg.DoModal();
}
5、在ClassView的Czft中添加一个公共成员变量int int
a[256]。

6、编译运行。

四、实验结果。

相关文档
最新文档