import os from PIL import Image from PIL import ImageFilter import cv2 import numpy filePath = 'D:\\Users\\Administrator\\PycharmProjects\\pythonProject\\paper_need\\deblur\\' for i in os.listdir(filePath): outPath = 'D:\\Users\\Administrator\\PycharmProjects\\pythonProject\\paper_need\\sharp\\' + str(i) img = cv2.imread("./deblur/"+i) blur_img = cv2.GaussianBlur(img, (5, 5), 0) # 计算细节图像 detail_img = cv2.subtract(img, blur_img) # 控制锐化的强度 alpha = 1.5 # 计算锐化后的图像 sharp_img = cv2.add(img, alpha * detail_img) cv2.imwrite(outPath,sharp_img),上述代码出现错误:sharp_img = cv2.add(img, alpha * detail_img) cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:674: error: (-5:Bad argument) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function 'cv::arithm_op',如何修改
时间: 2023-07-21 18:44:57 浏览: 187
根据报错信息,可以看到是因为 `img` 和 `detail_img` 的类型不同导致的。`img` 是 `numpy.ndarray` 类型,而 `detail_img` 是 `numpy.ufunc` 类型,因此需要将 `detail_img` 转换成 `numpy.ndarray` 类型。同时,报错信息中也提示了需要在 `cv2.add` 函数中指定输出数组的类型,因此还需要添加一个 `dtype` 参数。
以下是修改后的代码:
```python
import os
import cv2
import numpy as np
filePath = 'D:\\Users\\Administrator\\PycharmProjects\\pythonProject\\paper_need\\deblur\\'
for i in os.listdir(filePath):
outPath = 'D:\\Users\\Administrator\\PycharmProjects\\pythonProject\\paper_need\\sharp\\' + str(i)
img = cv2.imread("./deblur/"+i)
blur_img = cv2.GaussianBlur(img, (5, 5), 0)
# 计算细节图像
detail_img = cv2.subtract(img, blur_img)
# 将 detail_img 转换成 numpy.ndarray 类型
detail_img = np.array(detail_img)
# 控制锐化的强度
alpha = 1.5
# 计算锐化后的图像,同时指定输出数组类型
sharp_img = cv2.add(img, alpha * detail_img, dtype=cv2.CV_8UC3)
cv2.imwrite(outPath, sharp_img)
```
以上代码中,我们在 `detail_img` 后添加了 `np.array` 函数将其转换成 `numpy.ndarray` 类型。同时,在 `cv2.add` 函数中添加了 `dtype` 参数,指定输出数组的类型为 `cv2.CV_8UC3`,即 8 位无符号整型 3 通道数组。
阅读全文