opencv对图片进行压缩或解码,分别给出代码并逐步解释
时间: 2023-05-27 07:03:46 浏览: 87
1. OpenCV利用jpeg库对图片进行压缩
```python
import cv2
# 读取要压缩的图片
img = cv2.imread('image.jpg')
# 设置压缩参数,其中第一个参数为压缩程度,0为最大压缩,100为无压缩;第二个参数为编码器,推荐使用cv2.IMWRITE_JPEG_QUALITY
compress_param = [90, cv2.IMWRITE_JPEG_QUALITY]
# 调用imencode()函数将图片压缩为JPEG格式
compressed_img = cv2.imencode('.jpg', img, compress_param)
# 将压缩后的数据流写入文件或发送给网络
with open('compressed_image.jpg', 'wb') as f:
f.write(compressed_img[1])
```
解释:
- 首先利用OpenCV的cv2.imread()函数读取图片
- 然后设置压缩参数,第一个参数表示压缩程度,范围为0到100,0表示最大压缩,100表示无压缩;第二个参数为编码器,推荐使用cv2.IMWRITE_JPEG_QUALITY以JPEG格式进行压缩。
- 调用cv2.imencode()函数将图片压缩为JPEG格式的数据流,返回一个元组,第一个元素为布尔值,表示是否成功压缩,第二个元素为压缩后的数据流。
- 最后将压缩后的数据流写入文件或发送给网络。
2. OpenCV利用jpeg库对图片进行解码
```python
import cv2
# 读取要解码的图片
with open('compressed_image.jpg', 'rb') as f:
img_buffer = f.read()
# 调用imdecode()函数将JPEG格式的数据流解码为图片
img = cv2.imdecode(np.frombuffer(img_buffer, dtype=np.uint8), cv2.IMREAD_COLOR)
# 显示解码后的图片
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释:
- 首先用Python的文件读取操作将压缩后的数据流读取为字节流。
- 接着,将字节流转换为NumPy数组格式,然后调用cv2.imdecode()函数解码JPEG格式的数据流为OpenCV格式的图片。
- 最后,利用cv2.imshow()函数显示解码后的图片。
阅读全文