Python二维离散余弦变换图像压缩应用(基于OpenCV)

离散余弦变换的特征是将物体信息能量汇聚到低频成分,高频成分接近0,因此被用于语音和图像处理领域。

在图像压缩存储中,可以将原始图像进行二维离散余弦变换,然后存储含有信息的低频部分的数据。在图像还原过程中,通过这些携带信息的低频数据就可以还原原始大小的图像。

Python程序如下:

# -*- coding: -utf-8 -*-
# Python版本:Python3.5
#库:numpy,opencv,matplotlib
#基于离散余弦变换DCT的图像压缩
#  作者:James_Ray_Murpy
# 2018/01/25

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('11.jpg', 0)   #读取图片,

img1 = img.astype('float')        #将uint8转化为float类型

img_dct = cv2.dct(img1)         #进行离散余弦变换

img_dct_log = np.log(abs(img_dct))  #进行log处理

img_recor = cv2.idct(img_dct)    #进行离散余弦反变换

# 图片压缩,只保留100*100的数据
recor_temp = img_dct[0:100,0:100]
recor_temp2 = np.zeros(img.shape)
recor_temp2[0:100,0:100] = recor_temp
#压缩图片恢复
img_recor1 = cv2.idct(recor_temp2)

#显示
plt.subplot(221)
plt.imshow(img)
plt.title('original')

plt.subplot(222)
plt.imshow(img_dct_log)
plt.title('dct transformed')

plt.subplot(223)
plt.imshow(img_recor)
plt.title('idct transformed')

plt.subplot(224)
plt.imshow(img_recor1)
plt.title('idct transformed2')

plt.show()
效果图如下:



发布了24 篇原创文章 · 获赞 33 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览