Traceback (most recent call last): File "C:\Users\l\Desktop\临时文件夹\Python入门\ks_txzq.py", line 29, in <module> cv2.imshow('Rotated Image', enhancer) cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'imshow' > Overload resolution failed: > - mat is not a numpy array, neither a scalar > - Expected Ptr<cv::cuda::GpuMat> for argument 'mat' > - Expected Ptr<cv::UMat> for argument 'mat'
时间: 2024-03-23 17:36:53 浏览: 234
浅谈Python traceback的优雅处理
根据错误提示,`cv2.imshow()`函数的参数`enhancer`不是numpy数组,也不是标量,因此出现了错误。这可能是因为在`enhancer`变量中存储的是Pillow库中的Image对象,而`cv2.imshow()`函数需要的是OpenCV中的numpy数组。要解决这个问题,可以使用Pillow库中的`np.array()`函数将Image对象转换为numpy数组,然后将转换后的数组传递给`cv2.imshow()`函数。
以下是一种可能的解决方案:
```python
from PIL import Image, ImageEnhance
import cv2
import numpy as np
# 打开图像
img = Image.open('image.jpg')
# 旋转图像
rotated = img.rotate(45)
# 增强图像对比度
enhancer = ImageEnhance.Contrast(rotated).enhance(1.5)
# 将Image对象转换为numpy数组
enhancer_arr = np.array(enhancer)
# 显示处理后的图像
cv2.imshow('Rotated and Enhanced Image', enhancer_arr)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个解决方案中,我们首先使用Pillow库中的`np.array()`函数将Image对象`enhancer`转换为numpy数组`enhancer_arr`,然后将`enhancer_arr`传递给`cv2.imshow()`函数。这样就可以正确显示处理后的图像了。
阅读全文