error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'imencode' > Overload resolution failed: > - img is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'img'
时间: 2023-08-28 09:16:22 浏览: 305
windows:opencv-4.3.0、opencv-4.5.5 、 opencv-4.7.0
这个错误通常是因为`img`不是numpy数组或者cv::UMat指针类型导致的。可以检查一下`img`的类型,确保它是numpy数组,并且在调用`cv2.imencode()`函数时,将numpy数组传递给`img`参数。
如果`img`确实是numpy数组,那么可以将其转换为cv::UMat类型,然后再传递给`cv2.imencode()`函数。可以使用`cv2.UMat()`函数将numpy数组转换为cv::UMat类型,如下所示:
```
import cv2
import os
# 读取灰度图像
img_path = 'gray_image.jpg'
img = cv2.imread(img_path, 0)
# 将numpy数组转换为cv::UMat类型
img_um = cv2.UMat(img)
# 设置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_um, 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()
```
这样可以将numpy数组转换为cv::UMat类型,避免传递错误的参数类型。
阅读全文