zoukankan      html  css  js  c++  java
  • 图像压缩

    一个数字图像文件包含MxN个像素的阵列,实际上就是一个MxN的矩阵,现假定每个象素有0~255个灰度值,即矩阵元素为8位的整数(矩阵可以表示为char[m][n] matrix),要求将该图像文件保存为一个自定义格式的文件,使存储空间最小。压缩后还要能还原为原来的图像文件。
    输入:图像文件。 格式:二进制,设矩阵的第m行第n列元素为Num(m,n),文件中按照Num(1,1),Num (1,2),……Num(m,n)的顺序连续放入m*n个二进制表示的8位整数(无任何分隔符号)。文件名格式为*.mtr
      例:一个如下3x3像素的数字图像:
        | 1  129 255|
        | 2   3   6 |
        |32  33  34 |
        文件内容表示为二进制串:000000011000000111111111000000100000001100000110001000000010000100100010

    输出:自定义格式的压缩文件。

    要求:
    <1>可以使用任意语言。
    <2>输入的图像文件位于固定目录,绝对路径为“C:\”,输入文件有多个。
    <3>做成一个Win32控制台可执行程序或脚本(不要GUI),以命令行参数控制当前运行压缩功能还是还原功能。
        当命令行第一个参数为1时,执行压缩功能:在程序中一次性读取C盘根目录下的所有*.mtr文件,处理后输出压缩文件到当前目录。
        当命令行第一个参数为0时,执行还原功能:读取当前目录下所有上一步骤生成的压缩文件,还原后仍输出到当前目录。
    <4>执行压缩功能时,每个输入的图像文件要生成一个输出的压缩文件,输出的压缩文件的文件名格式为:[各人名字全拼_输入图像文件名(不包括扩展名).自定义扩展名],自定义扩展名不能是mtr。例:输入图像文件为a.mtr,输出文件名为lili_a.xxx。
    <5>执行还原功能时,同样是一对一生成文件,还原后文件文件名格式为:[压缩文件名(不包括扩展名).mtr]。例:压缩文件为:lili_a.xxx,还原后文件名为:lili_a.mtr。
    <6>执行速度不能过慢。
    例:“C:\”目录下有三个文件a.mtr,b.mtr,c.mtr。
        启动命令行,当前目录设置到D:\Arena\。
        执行程序,第一个参数设置为1,命令行显示为:D:\Arena\xxx.exe 1,此时要在D:\Arena\下生成lili_a.xxx,lili_b.xxx,lili_c.xxx三个压缩文件。
        再次执行程序,第一个参数设置为0,命令行显示为:D:\Arena\xxx.exe 0,此时要在D:\Arena\下生成lili_a.mtr,lili_b.mtr,lili_c.mtr三个还原后的文件。


    比赛规则:
    <1>不限语言,但不能使用任何压缩算法的第三方库
    <2>首先压缩的文件都要能还原,还原文件内容与原始文件完全一致(二进制串完全相同)
    <3>测试时使用多个文件计算平均压缩率,平均压缩率较小者获胜
    <4>压缩率定义为压缩后文件size(字节数)/原始文件size(字节数)*100%(如果压缩后文件比原始文件大,将得到一个大于100%的数),平均压缩率定义为为所有压缩率的算术平均数。
    <5>存在内存泄漏为自动放弃比赛
    <6>存在异常退出为自动放弃比赛
    <7>压缩率相差在0.5%以下(含0.5%)视为相同压缩率
    <8>出现相同压缩率时使用更多文件比较

  • 相关阅读:
    【python 待做】
    【python 第13日】网络通信socket socketserver
    【python第11日】自动生成项目目录 安全插入本文件夹下文件,即使别人引用也可以
    【python 第12日】 except异常
    【python 第10日】打飞机的小游戏 pygame
    【python 第9日】上下文 类装饰器 元类 属性描述符扩展
    Python(2.7)-字符串
    Python(2.7)-字典(dict)
    Python(2.7)-列表(list)
    mysql linux centos yum 安装
  • 原文地址:https://www.cnblogs.com/sysdzw/p/1939373.html
Copyright © 2011-2022 走看看