imwrite(compress_path, img, { IMWRITE_JPEG_QUALITY, 10 }); 是什么意思,有什么作用
时间: 2023-05-29 09:04:31 浏览: 56
这段代码是将图像img以JPEG格式压缩并保存到路径compress_path中,其中IMWRITE_JPEG_QUALITY是指定压缩质量的参数,值为10表示压缩质量较低,文件大小较小。这段代码的作用是将图像进行压缩,以减小文件大小,方便存储和传输。
相关问题
for (size_t i = 0; i < fn.size(); ++i) { Mat img = imread(fn[i], IMREAD_UNCHANGED); string compress_path = "/root/photo/compressphoto/" + fn[i].substr(fn[i] .find_last_of("/\\") + 1); imwrite(compress_path, img, { IMWRITE_JPEG_QUALITY, 10 }); } ;这段代码什么意思,有什么作用
这段代码是一个循环,遍历一个包含文件名的字符串向量fn,取出每个文件名,读取该文件并存储为一个OpenCV的Mat对象img,然后将该图像压缩为JPEG格式,压缩质量为10,并将压缩后的图像保存在指定的目录下。该代码的作用是将指定目录下的图片进行批量压缩,并保存到指定的目录下,以节省存储空间。
优化这串代码import cv2 import os # 读取灰度图像 img = cv2.imread('gray_image.jpg', 0) # 设置JPEG压缩参数 encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90] # 进行JPEG压缩 result, compress_img = cv2.imencode('.jpg', img, encode_param) # 计算压缩率 original_size = os.path.getsize('gray_image.jpg') compress_size = compress_img.size compression_ratio = original_size / compress_size # 解码压缩图像 decompress_img = cv2.imdecode(compress_img, 0) # 显示压缩前后的图像 cv2.imshow('Original Image', img) cv2.imshow('Compressed Image', decompress_img) print('Compression Ratio:', compression_ratio) cv2.waitKey(0) cv2.destroyAllWindows()
这段代码已经很简洁了,但还是可以进行一些优化:
1. 将常量定义为变量,减少重复计算。
2. 使用with语句来自动释放资源,避免忘记释放资源。
3. 可以将压缩和解压缩封装成函数,提高代码的可复用性。
优化后的代码如下:
```
import cv2
import os
# 读取灰度图像
img_path = 'gray_image.jpg'
img = cv2.imread(img_path, 0)
# 设置JPEG压缩参数
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
# 进行JPEG压缩
with open(img_path, 'rb') as f:
img_data = f.read()
result, compress_img = cv2.imencode('.jpg', img_data, encode_param)
# 计算压缩率
original_size = os.path.getsize(img_path)
compress_size = compress_img.size
compression_ratio = original_size / compress_size
# 解码压缩图像
decompress_img = cv2.imdecode(compress_img, 0)
# 显示压缩前后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Compressed Image', decompress_img)
print('Compression Ratio:', compression_ratio)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这样可以更好地管理和释放资源,同时代码也更加简洁易读。