cv2.imwrite('image_compressed.jpg', img, params) 执行报错{TypeError}imwrite() takes 2 positional arguments but 3 were given
时间: 2024-06-11 12:08:37 浏览: 87
根据错误提示,imwrite()函数只需要两个参数,但是你提供了三个参数,第三个参数params是不必要的。你可以把第三个参数去掉,重新执行代码。如果你需要使用params参数,可以将它作为字典传递给imwrite()函数,例如:
```
params = {"quality": 90}
cv2.imwrite('image_compressed.jpg', img, params=params)
```
相关问题
cv2.imwrite('test_imwrite.png',img,(cv2.IMWRITE_PNG_COMPRESSION,5))
cv2.imwrite函数是OpenCV库中用于将图像保存到文件的函数。它接受三个参数:文件名、图像数据和保存参数。在你提供的代码中,你将图像保存为名为'test_imwrite.png'的文件,并指定了PNG格式和压缩级别为5。
请注意,压缩级别的取值范围是0到9,其中0表示无压缩,9表示最高压缩。这意味着你选择了中等压缩级别5,这可能会在一定程度上减小文件大小,但也会损失一些图像质量。
如果你有更多关于cv2.imwrite函数的问题,或者其他问题,请继续提问。
优化这串代码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()
```
这样可以更好地管理和释放资源,同时代码也更加简洁易读。
阅读全文