大发pk10_pk10下载_大发pk10下载 - 由大发pk10,pk10下载,大发pk10下载社主办的《大发pk10,pk10下载,大发pk10下载》是我国消费领域中一张全国性、全方位、大容量的综合性日报。其立足消费网投领域,依托轻工行业,面向城乡市场,最先发布相关的专业权威资讯。

210.BMP彩色图像转化为灰度及二值图像

  • 时间:
  • 浏览:2

  多媒体技术是一门综合了多种学科的新技术,其涉及到计算机科学与技术、通信和网络技术、人工智能技术、微电子技术、数字信号处里、图形处 理技术、声像技术等诸多学科。并且我新技术的不断总是老出和体验,带给亲戚亲戚朋友工作和生活巨大的改变。其应用可能渗透到社会生活和工作的各个方面。

1.1背景

   多媒体技术是20世纪80年代发展起来的一种生活新技术,是将文本、图形、图像、动画、声音、视频等信息通过计算机处里,形成人机交互作用的技术。多媒体技术的发展一块儿也改变了计算机的使用领域,由仅仅限于专业办公领域扩展到各行各业,以及家庭生活和大众娱乐等方方面面。很大程度上改善了亲戚亲戚朋友儿的学习和生活。随着计算机技术、网络通讯技术、电子信息等技术的快速发展,多媒体技术的应用和发展也面临着更大的机遇。

图1.1 多媒体技术与应用

  本课程多媒体技术与应用可分为多媒体实用技术和多媒体技术应用两方面,其中多媒体技术应用于生活、教学、艺术等方面,多媒体实用技术可分为基本概念、多媒体计算机系统、多媒体音频技术、多媒体视频技术、多媒体数据压缩技术、图像与图像处里技术、超文本与超媒体技术、多媒体应用系统设计、多媒体应用系统创作工具、多媒体应用系统应用应用程序设计、图形、图像设计技术、数字音频设计技术、数字视频设计技术几部分,本次课程选题为多媒体应用系统应用应用程序设计中的图形、图像设计技术,基于C语言实现BMP彩色图像转化为灰度及二值图像。

1.2设计的简要介绍

  本次课程设计选题基于C语言实现一种生活BMP彩色图像转化为灰度及二值图像系统应用应用程序,属于多媒体实用技术中多媒体应用系统应用应用程序设计的1个 分支,具体是一种生活图形、图像设计技术,取舍 BMP彩色数字图像作为实验目标,将其转化为灰度模式和二值模式。本次课程设计将采用提出那先 的问题、分析那先 的问题、处里那先 的问题、验证与实验、总结的思路完成。

BMP文件因其“所见即所得”的特点,尽管文件大小比较大,并且我位图文件的简单性、在微软视窗和并且我地方的广泛使用以及一种生活格式的优秀文档标准以及那么 专利约束,使得它成为并且我操作系统图像处里系统应用应用程序也能读写的一种生活最为常用的格式。本次课程设计并且我利用C语言实现其颜色模式的转换。

2.1重要概念

2.1.1 BMP数字图像文件社会形态

  Windows使用的图形文件格式主并且我BMP图形信息文件,在Windows背景下交换、运行与位图相关的信息的标准格式,一块儿BMP图像信息文件格式是完整图像信息处里软件都支持。Windows显示图像信息标准与绘画图像均以BMP图像信息格式。Windows3.0前期的BMP图像数据信息格式和显示器参数相关联,故将此类BMP格式图像信息文件称之为设备参数相关位图DDB(device-dependent bitmap)文件数据格式。Windows3.0后期的BMP图像数据信息和显示器参数无关联,故将此类BMP格式图像信息文件叫作设备参数无关位图DIB(device-independent bitmap) 数据格式,目标主并且我让Windows能只有在任一类别的显示设备上呈现所留存的数据文件。BMP位图信息数据采用文件后缀名是BMP或bmp。

 

图2.1 BMP文件社会形态

  标准的位图图像文件社会形态是中含四部分组成:位图文件头、位图信息头、调色板和定义位图的数据序列,其具体的数据文件格式特点和形式,位图文件社会形态如图2.1所示。支持单色、16色、256色和全彩色(目前最高位为32位)一种生活图像法子;每个位图文件仅一幅存储图像;图像存储时提供一种生活模式为非压缩和压缩。

2.1.2 灰度图像

  在计算机领域中,灰度(Gray scale)数字图像是每个像素只有1个 采样颜色的图像。类似于图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上一种生活采样能只有是任何颜色的不同深浅,不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白一种生活颜色,灰度图像在黑色与白色之间还有并且我级的颜色速度。并且我,在数字图像领域之外,“黑白图像”也表示“灰度图像”,类似于灰度的照片通常叫做“黑白照片”。在并且我关于数字图像的文章中单色图像等同于灰度图像,在另外并且我文章中又等同于黑白图像。

  灰度图像老并且我在单个电磁波频谱咋样见光内测量每个像素的亮度得到的。用于显示的灰度图像通常用每个采样像素8 bits的非线性尺度来保存,原来能只有有256种灰度(8bits并且我2的8次方=256)。一种生活精度刚刚 也能处里可见的条带失真,并且我非常易于编程。在医学图像与遥感图像那先 技术应用中总是采用更多的级数以充分利用每个采样10或12 bits的传感器精度,并且我处里计算时的近似误差。在原来的应用领域流行使用16 bits即65536个组合(或65536种颜色)。

2.1.3 二值图像

  二值图像是每个像素只有1个 可能值的数字图像。亲戚亲戚朋友总是用黑白、B&W、单色图像表示二值图像,并且我也能只有用来表示每个像素只有1个 采样值的任何图像,类似于灰度图像等。

二值图像总是总是老出在数字图像处里中作为图像掩码可能在图像分割、二值化和dithering的结果中总是老出。并且我输入输出设备,如激光打印机、传真机、单色计算机显示器等都能只有处里二值图像。二值图像总是使用位图格式存储。

2.2 相关原理、算法

2.2.1 彩色转灰度法子一

  任何颜色不会红、绿、蓝三原色组成,假如有一天原来某点的颜色为 RGB(R,G,B),那么 ,亲戚亲戚朋友儿能只有通过下面几种法子将其转换为灰度:

  浮点算法: Gray=R*0.3+G*0.59+B*0.11

  整数法子: Gray=(R*80+G*59+B*11)/80

  移位法子: Gray =(R*28+G*151+B*77)>>8;

  平均值法: Gray=(R+G+B)/3;

  仅取绿色: Gray=G;

  通过上述任一种生活法子求得 Gray 后,将原来的 RGB(R,G,B)中的R,G,B 统一用 Gray 替换,形成新的颜色 RGB(Gray,Gray,Gray),用它替换原来的 RGB(R,G,B)并且我灰度图。

2.2.2 彩色转灰度法子二

  改变象素矩阵的 RGB 值,来达到彩色图转变为灰度图加权平均值算法: 根据光的亮度社会形态, 嘴笨 正确的灰度公式应当是

  R=G=B=R*0.299+G*0.587+B0.144

  为了提高速度亲戚亲戚朋友儿做1个 完整能只有接受的近似,公式变形如下:

  R=G=B=(R*3+G*6+B)/10

2.2.3 彩色转二值图像

  二值图只有1个 颜色,黑和白,而灰度有256种颜色,将灰度转化为二值是取舍 1个 阈值,将灰度值大于一种生活阈值的置成白色,反之为黑色。

  关于阈值的取舍 有固定值法、双峰法、P参数发、大津法(0tsu法或最大类间方差法)、最大熵阈值法、迭代法(最佳阈值法)等法子。

2.3 设计思路

  需求分析,按照选题要求,将采用读取文件,取舍 功能,执行操作的思路完成系统应用应用程序,具体逻辑社会形态如图2.2。即目标系统应用应用程序的逻辑为主函数现在现在结束执行,让用户输入待处里文件(源文件)和目标文件绝对路径,判断不是正确,正确进行下一步让用户取舍 功能,根据用户取舍 功能调用相应的函数执行相应的操作,即为目标设计系统应用应用程序工作流程。

 

图2.2 目标系统应用应用程序工作流程

  流程设计,为实现上述目标系统应用应用程序,将采用系统应用应用程序准备、读入文件路径、功能函数设计、功能整合的设计思路完成目标系统应用应用程序。

2.3.1 系统应用应用程序准备

  1)根据2.1.1,定义位图文件头

  这部分数据块趋于稳定文件开头,用于进行文件的识别。典型的应用系统应用应用程序会首先普通读取这部分数据以确保的确是位图文件并且我那么 损坏。所有的整数值都以小端序存放(即最低有效位前置)。

图2.3 位图文件头

  2)定义文件信息头(DIB头)

  这部分告诉应用系统应用应用程序图像的完整信息,在屏幕上显示图像可能使用那先 信息,它从文件的第11个字节现在现在结束。这部分数据块对应了Windows和OS/2中的组织组织结构使用的头社会形态以及其它并且我版本的变体。但所有版本均以1个 DWORD位(32位)现在现在结束,用以说明该数据块的大小,使得应用系统应用应用程序也能根据一种生活大小来区分该图像实际使用了哪种版本的DIB头社会形态。

  趋于稳定多种版本的头社会形态的原困是微软对DIB格式进行不要 次扩展。图2.4即为所有不同版本的DIB头:

图2.4 不同版本的DIB头

  BITMAPCOREHEADER刚刚 的版本都并且我在前一版本社会形态末尾追加字段。

  出于兼容性的考量,大多数应用系统应用应用程序使用较旧版本的DIB头保存文件。在不考虑OS/2的状况下,目前通用的格式为BITMAPINFOHEADER版本,内容在图2.5中列出。除非有特殊说明,其中所有值均为无符号整数。

 

图2.5 BITMAPINFOHEADER版本DIB头

  3)定义调色板

  这部分定义了图像中所用的颜色。如上所述,位图图像1个 像素接着1个 像素储存,每个像素使用1个 可能多个字节的值表示,并且我调色板的目的并且我要告诉应用系统应用应用程序那先 值所对应的实际颜色。

  典型的位图文件使用RGB彩色模型。在一种生活模型中,部分颜色不会由不同速度(从0到最大速度)的红色(R)、绿色(G)和淡蓝色(B)组成的,也并且我说,部分颜色都能只有使用红色、绿色和淡蓝色的值所定义。

  在位图文件的实现中,调色板能只有中含并且我条目,条目个数并且我图像中所使用的颜色的个数。每个条目用来描述一种生活颜色,中含1个 字节,其中1个 表示红色、绿色和淡蓝色,第1个字节那么 使用(大多数应用系统应用应用程序将它设为0);对于每个字节,数值0表示该颜色分量在当前的颜色中那么 使用,而数值255表示一种生活颜色分量使用最大的速度。

  4)定义并且我数据

  X Window System使用类似于的.XBM格式表示一位黑白图像以及.XPM(pixelmap)表示彩色图像。另外还一种生活.RAW格式,它除了保存原始数据之外那么 任何并且我信息。并且我还有Portable Pixmap file format(.PPM)和Truevision TGA(.TGA),并且我它们用得很少可能只用于特殊目的。尽管并且我格式也保存为“位图”(与矢量图不同),并且我它们使用数据压缩可能颜色索引,并且我它们不会严格意义上的位图。

  可能中含有冗余信息,并且我BMP文件使用类似于于ZIP原来的无损数据压缩算法也能获取很好的压缩效果。

2.3.2 读入文件路径

  定义1个 大小为80的字符数组存储路径,输出提示,让用户输入绝对路径,并存储在字符数组中。判断字符数字内路径不是为空,为空则打开失败。注意源文件是rb+的打开法子,而目标文件是wb的打开法子。

2.3.3 功能函数彩色转灰度图像设计

1)读取位图头社会形态和信息头,

2)修改信息头,修改文件头,

3)创建调色板,

4)写入文件头、信息头、调色板

5)调用2.2.2的公式将位图信息转为灰度,

6)释放内存空间,关闭文件

2.3.4 功能函数彩色转二值图像设计

1)创建位图文件头,信息头,调色板

2)读入源位图文件头和信息头

3)修改文件头,信息头信息

4)将位图文件头,信息头和调色板写入文件

5)将彩色图转为二值图,这里取舍 阈值为90

6)释放内存空间,关闭文件

2.3.5 功能整合

1)输入文件路径

2)判断路径不是合法

3)输出功能选项

4)输入取舍 功能

5)根据取舍 功能调用函数

6)执行成功输出提示符

3.2 开发环境

操作系统:使用Windows10专业版64位操作系统

开发语言:C语言

开发工具:Dev-C++

3.2 主要代码与说明

3.2.1 系统应用应用程序准备

根据2.3.1进行系统应用应用程序准备,代码及注释如下:

     /* 定义位图文件头 */   
    typedef struct tagBITMAPFILEHEADER  
    {  
        unsigned short bfType;//文件格式  
        unsigned long bfSize;//文件大小  
        unsigned short bfReserved1;//保留  
        unsigned short bfReserved2;//保留   
        unsigned long bfOffBits; //DIB数据在文件中的偏移量  
    }fileHeader;  
    /* 位图数据信息社会形态 */  
    typedef struct tagBITMAPINFOHEADER  
    {  
        unsigned long biSize;//该社会形态的大小,BITMAPINFOHEADER社会形态所都要的字数   
        long biWidth;//文件速度,像素为单位   
        long biHeight;//文件速度,像素为单位,为正数,图像是倒序的,为负数,图像是正序的   
        unsigned short biPlanes;//平面数,为目标设备说明颜色平面数,总被置为1   
        unsigned short biBitCount;//颜色位数,说明比特数/像素   
        unsigned long biCompression;//压缩类型,说明数据压缩类型   
        unsigned long biSizeImage;//DIB数据区大小,说明图像大小,字节单位   
        long biXPixPerMeter;//水平分辨率,像素/米  
        long biYPixPerMeter;//垂直分辨率  
        unsigned long biClrUsed;//哪几个颜色索引表,颜色索引数   
        unsigned long biClrImporant;//哪几个重要颜色,重要颜色索引数,为0表示都重要   
    }fileInfo;  
    /* 调色板社会形态 */  
    typedef struct tagRGBQUAD  
    {  
        unsigned char rgbBlue; //淡蓝色分量亮度  
        unsigned char rgbGreen;//绿色分量亮度  
        unsigned char rgbRed;//红色分量亮度  
        unsigned char rgbReserved;  
    }rgbq;  
    /* 并且我数据 */   
    typedef struct OtherData    
    {    
        unsigned char extradata;    
        struct OtherData *next;    
    }OtherData;  

3.2.2 读入文件路径

根据2.3.2读入文件路径,代码如下:

char inPath[80],outPath[80];  
scanf("%s",inPath);  
scanf("%s",outPath);  
FILE *fp1 = fopen(inPath, "rb+");  
if (fp1 == NULL)  
{  
    printf("打开文件fp1失败");  
    return 0;  
}  
FILE *fp2 = fopen(outPath, "wb");  
if (fp1 == NULL)  
{  
    printf("打开文件fp2失败");  
    return 0;  
}  

3.2.3 功能函数彩色转灰度图像设计

根据2.3.3,其中将位图信息转为灰度代码如下:

    /* 将位图信息转为灰度 */   
    //存储bmp一行的像素点  
    unsigned char ImgData[800][3];  
    //将灰度图像存到一维数组中  
    unsigned char ImgData2[800];  
    for (i = 0; i<fi->biHeight; i++)  
    {  
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)  
        {  
            for (k = 0; k<3; k++)  
            fread(&ImgData[j][k], 1, 1, fp1);  
        }  
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)  
        {  
            ImgData2[j] = int((float)ImgData[j][0] * 0.114 +  
                (float)ImgData[j][1] * 0.587 +  
                (float)ImgData[j][2] * 0.299);  
        }  
        //将灰度图信息写入  
        fwrite(ImgData2, j, 1, fp2);  
    }  

3.2.4 功能函数彩色转二值图像设计

根据2.3.4,其中将彩色图转为二值图代码如下:

    /*将彩色图转为二值图*/  
    a=(unsigned char *)malloc((fi->biWidth*3+3)/4*4);//给变量a申请源图每行像素所占大小的空间,考虑四字节对齐那先

的问题  
    c=(unsigned char *)malloc((fi->biWidth+3)/4*4);//给变量c申请目标图每行像素所占大小的空间,同样四字节对齐  
    for(i=0;i<fi->biHeight;i++)//遍历图像每行的循环  
    {  
        for(j=0;j<((fi->biWidth*3+3)/4*4);j++)//遍历每行中每个字节的循环  
        {  
            fread(a+j,1,1,fp1);//将源图每行的每1个

字节读入变量a所指向的内存空间  
        }  
        for(j=0;j<fi->biWidth;j++)//循环像素速度次,就不用计算读入四字节填充位  
        {  
            b=(int)(0.114*(float)a[k]+0.587*(float)a[k+1]+0.299*(float)a[k+2]);//a中每1个

字节分别代表BGR分量,乘上不同权值转化为灰度值  
            if(90<=(int)b)   
                b=1;//将灰度值转化为二值,这里取舍

的阈值为190  
            else   
                b=0;  
            c[j]=b;//存储每行的二值  
            k+=3;  
        }  
        fwrite(c,(fi->biWidth+3)/4*4,1,fp2);//将二值像素四字节填充写入文件,填充位那么

初始化,为随机值  
        k=0;  
    }  

3.2.5 功能整合

根据2.3.5,功能整合可采取如下格式:

int main(void)  
{  
    scanf("%s",inPath);  
    scanf("%s",outPath);  
    FILE *fp1 = fopen(inPath, "rb+");  
    FILE *fp2 = fopen(outPath, "wb");  
    scanf("%d",&n);  
    switch(n)  {  
        case 1:  {  
                  if(colorToGray(fp1,fp2) == 1)  
                  {  
                        printf("success\n");  
                   }  
                   break;  
            };  
         case 2:  
                {  
                    if(colorToTwoValue(fp1,fp2) == 1)  
                    {  
                          printf("success\n");  
                    }  
                    break;  
             }  
          default: break;  
        }  
}  

4.1 系统应用应用应用程序结果

图4.1 彩色转灰度功能实现

 

图4.2 彩色转二值图功能实现

4.2 那先 的问题与处里

4.2.1 使用法子

  本次课程设计中,彩色图转变为灰度图使用加权平均值算法,彩色图像转变为二值图使用固定阈值法,作为改进可使用迭代法已达到最佳效果,使用固定阈值有的图无法达到你要的效果,如都低于阈值或都高于阈值。

4.2.2 那先 的问题

  1)C语言中“\\”表示“\”,第1个 表示转义字符,可能绝对路径后边用“\”,则都要用“\\”表达,也可用“/”表达,如C:/Users/zander/Desktop/1.bmp。

  2)知网和维基百科后边的内容能只有写参考文献,百度或并且我博客上的内容不太好写参考文献。

  3)代码高亮处里后,再克隆qq好友好友HTML格式到word文档,方便阅读,并且我也趋于稳定并且我那先 的问题,比如再次克隆qq好友好友到编译器中前面会加序号,直接在word中删除一行,则会原困两行颜色一样。

  4)同1个 word文件用Word打开和用WPS打开排版略有变化,通过输出PDF格式能只有处里,如输出并发送PDF格式打印,并且我由PDF文件打印出来页边距比word格式直接打印出来页边距略大。

4.3 感想和总结

  通过本次课程设计,对《多媒体技术与应用》这门课有了进一步的理解,在课程设计的过程中,通过查阅资料深刻地感受到多媒体技术在工作生活中应用之广。随着移动互联网时代的发展,物联网大数据时代的到来,多媒体技术无论是教育还娱乐方面不会应用,将来不会进一步深入到生活的方方面面,可见其重要性。本次课程设计的选题是C语言实现BMP格式文件彩色转灰度与二值图像,通过提出那先 的问题、分析那先 的问题、处里那先 的问题、验证与实验、总结一种生活流程,对图形、图像处里技术有了深刻的认识,后边发现了并且我那先 的问题,处里了并且我那先 的问题,还有并且我功能只有只有完善,对系统应用应用程序的设计实现流程有了进一步的理解,稍微简化的功能采用设计并且我实现能只有起到事半功倍的效果,远比直接敲代码速度高。资料的搜集要有根据,有权威性,有代表性,不仅能只有让查阅者方便查询验证,也是对正确性的一层保障。

[1]田振蒙.多媒体技术的应用现状及其发展前景研究[J].科技传播,2018,10(22):162-163.

[2]李威,张银玲,赵婷婷.BMP数字图像的认识与应用[J].科技资讯,2016,14(36):80+91.

[5]维基百科编者. BMP[G/OL]. 维基百科, 2018(20180531)[2018-05-31].