代码语言:javascript复制
import cv2
import numpy as np
image=cv2.imread('C:/Users/xpp/Desktop/Lena.png',1)
cv2.imshow('original',image)
grayimg=cv2.cvtColor(image, cv.COLOR_BGR2GRAY)
rows,cols=grayimg.shape
image1=grayimg.flatten()#二维图像降维为一维列表
for i in range(len(image1)):
if image1[i]>=127:
image1[i]=255
if image1[i]<127:
image1[i]=0
data=[]
image3=[]
count=1
#行程压缩编码
for i in range(len(image1)-1):
if (count==1):
image3.append(image1[i])
if image1[i]==image1[i 1]:
count=count 1
if i==len(image1)-2:
image3.append(image1[i])
data.append(count)
else:
data.append(count)
count=1
if(image1[len(image1)-1]!=image1[-1]):
image3.append(image1[len(image1)-1])
data.append(1)
#压缩率
ys_rate=len(image3)/len(image1)*100
print('压缩率为' str(ys_rate) '%')
#行程编码解码
result=[]
for i in range(len(data)):
for j in range(data[i]):
result.append(image3[i])
result=np.reshape(result,(rows,cols))
cv2.imwrite('C:/Users/xpp/Desktop/result.jpg',result)
cv2.imshow('result',result) #重新输出二值化图像
cv2.waitKey(0)
算法:图像行程编码是将一扫描行中颜色值相同的相邻像素用两个字段表示,第一个字段是一个计数值,用于指定像素重复的次数;第二个字段是具体像素的值,主要通过压缩除掉数据中的冗余字节或字节中的冗余位,从而达到减少文件所占空间的目的。