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>出现相同压缩率时使用更多文件比较

  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/sysdzw/p/1939373.html
Copyright © 2011-2022 走看看