202212-3 JPEG 解码
例1
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
26
2
-26 -3 0 -3 -2 -6 2 -4 1 -3 1 1 5 1 2 -1 1 -1 2 0 0 0 0 0 -1 -1
例2
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
26
1
-26 -3 0 -3 -2 -6 2 -4 1 -3 1 1 5 1 2 -1 1 -1 2 0 0 0 0 0 -1 -1
例3
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99
26
0
-26 -3 0 -3 -2 -6 2 -4 1 -3 1 1 5 1 2 -1 1 -1 2 0 0 0 0 0 -1 -1
from math import pi,cos,sqrt #读入量化矩阵 q=[] for _ in range(8): q.append(list(map(int,input().split()))) #print(q) n=int(input())#扫描数据的个数。 t=int(input())#取值为 0、1 或 2,表示要进行的任务。 a=list(map(int,input().split())) #print(a) ''' 找到数据和下标的关系 00 01 10 20 11 02 03 12 21 30 ''' flag=3#0右 1左下 2下 3右上 x=0 y=0 num=0 time=-1 k=0 zf=1#正负 m=[ ([0]*8)for _ in range(8) ]#m=[[0]*8]*8#会对一列同时赋值 m4=[ ([0]*8)for _ in range(8) ] m5=[ ([0]*8)for _ in range(8) ] for i in range(n): #print(x,y) m[x][y]=a[i]#*q[x][y] m4[x][y]=a[i]*q[x][y] num+=1 time+=1 #右和下都是直走一格 if flag==0: flag=1 time=0 if k==8: zf=-1 k=k+1*zf elif flag==2: flag=3 time=0 if k==8: zf=-1 k=k+1*zf #注意走的次数 elif flag==1 and time==k: flag=2 elif flag==3 and time==k: flag=0 if flag==0:#右 y+=1 elif flag==1: y-=1 x+=1 elif flag==2: x+=1 elif flag==3: y+=1 x-=1 def funa(u): if u==0: return sqrt(1/2) else : return 1 if t==0:#步骤3 for i in range(8): print(*(m[i])) elif t==1:#步骤4 #if 1: # print() for i in range(8): print(*(m4[i])) elif t==2:#解码 #if 1: # print() for i in range(8): for j in range(8): sum=0 for u in range(8): for v in range(8): # sum+=funa(u)*funa(v)*m4[u][v]*math.cos(math.pi*u*(i+1/2))*math.cos(math.pi*v*(j+1/2)) sum+=funa(u)*funa(v)*m4[u][v]*cos(pi/8*u*(i+1/2))*cos(pi/8*v*(j+1/2)) sum=1/4*sum sum=int(sum+128) if sum>255:sum=255 elif sum<0:sum=0 m5[i][j]=sum print(*m5[i])

浙公网安备 33010602011771号