python计算图像压缩比
时间: 2023-10-10 11:16:06 浏览: 156
计算图像压缩比可以使用以下公式:
压缩比 = 原始图像大小 / 压缩后图像大小
其中,原始图像大小是指图像在未经过压缩处理前的文件大小,压缩后图像大小是指经过压缩处理后的文件大小。
在 Python 中,可以使用 Pillow 库来读取和处理图像文件。以下是一个示例代码:
```
from PIL import Image
import os
# 读取原始图像
img = Image.open('original_image.jpg')
original_size = os.stat('original_image.jpg').st_size
# 压缩图像
img.save('compressed_image.jpg', optimize=True, quality=50)
compressed_size = os.stat('compressed_image.jpg').st_size
# 计算压缩比
compression_ratio = original_size / compressed_size
print('压缩比:', compression_ratio)
```
在上述示例代码中,我们使用 Pillow 库读取原始图像,并使用 save() 方法将其压缩为 quality=50 的 JPEG 格式图像。通过 os.stat() 方法获取文件大小,然后计算压缩比并打印输出。
相关问题
python对图像转为灰度图,再实现KL变换,选取前10维度,实现了图像压缩,再进行重建显示重建后图像,比与原图做差值并比较,可以使用opencv
好的,下面是一个示例代码,使用了OpenCV库实现了图像的灰度化、KL变换、前10维度的选取、图像压缩、重建和重建后的图像显示:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 将图像转为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算KL变换矩阵
cov = np.cov(gray_img.T)
eig_vals, eig_vecs = np.linalg.eig(cov)
kl_matrix = eig_vecs.T[:10]
# 对图像进行KL变换
kl_img = np.dot(gray_img, kl_matrix.T)
# 对KL系数进行量化
quantized_kl_img = np.round(kl_img)
# 对KL系数进行反量化
dequantized_kl_img = np.dot(quantized_kl_img, kl_matrix)
# 对重建图像进行归一化
reconstructed_img = cv2.normalize(dequantized_kl_img, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
# 显示原始图像、压缩后的图像和重建后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Compressed Image', quantized_kl_img)
cv2.imshow('Reconstructed Image', reconstructed_img)
# 按下任意键退出程序
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用`cv2.imread()`函数读取了一张图像,然后使用`cv2.cvtColor()`函数将其转为灰度图。接着,我们计算了灰度图的协方差矩阵并求出了其特征值和特征向量,从而得到KL变换矩阵。将灰度图与KL变换矩阵相乘,即可得到KL系数。我们对KL系数进行量化(四舍五入)和反量化(矩阵相乘),得到重建后的图像。最后,我们使用`cv2.normalize()`函数将重建后的图像归一化并显示原始图像、压缩后的图像和重建后的图像。
需要注意的是,上面的代码中只使用了一张灰度图作为示例。如果要处理彩色图像,需要对每个通道分别进行处理。另外,KL变换只适用于有限维度的数据,对于高维度的图像,可能需要使用其他的压缩算法。
python对彩色图像转为灰度图,再实现KL变换,选取前10维度,实现了图像压缩,再进行重建显示重建后图像,比与原图做差值并比较,可以使用opencv
好的,下面是一个Python的示例代码:
```python
import cv2
import numpy as np
# 读取彩色图像
img = cv2.imread('test.jpg')
# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# KL变换
cov = np.cov(gray.T)
eigvals, eigvecs = np.linalg.eig(cov)
idx = eigvals.argsort()[::-1]
eigvals = eigvals[idx]
eigvecs = eigvecs[:,idx]
# 选取前10维度
k = 10
eigvecs = eigvecs[:,:k]
# 压缩
compressed = np.dot(gray, eigvecs)
# 重建
reconstructed = np.dot(compressed, eigvecs.T)
# 显示重建后图像
cv2.imshow('Reconstructed Image', reconstructed.astype(np.uint8))
# 计算差值并比较
diff = cv2.absdiff(gray, reconstructed.astype(np.uint8))
cv2.imshow('Difference', diff)
# 等待按键事件
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例代码中,我们首先读取了一个彩色图像,然后将其转为灰度图。接着,我们使用numpy库计算出灰度图的协方差矩阵,并对其进行特征值分解,得到特征值和特征向量。然后,我们选取了前10个特征向量,使用它们对灰度图进行压缩,并再次使用这些特征向量对压缩后的图像进行重建。最后,我们计算了重建后图像与原图之间的差值,并将其显示出来。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)