OpenCV(4.5.4) :-1: error: (-5:Bad argument) in function 'GaussianBlur' > Overload resolution failed: > - src is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'src'
时间: 2023-08-28 08:12:22 浏览: 196
根据错误信息,出现这个错误的原因是`GaussianBlur()`函数的输入参数`src`不是一个合法的NumPy数组或标量。可能是因为您传递给该函数的`src`参数的类型不是`numpy.ndarray`。请确保您传递给`GaussianBlur()`函数的参数是一个可以被OpenCV处理的图像(例如使用`cv2.imread()`函数读取的图像)。此外,也有可能是因为您在使用该函数之前没有对输入图像进行正确的读取或处理,导致`src`参数为空或不可用。
您可以尝试使用以下代码片段调用`cv2.imread()`函数读取图像文件,并将其传递给`GaussianBlur()`函数进行处理:
```python
img = cv2.imread("your_image_file.png")
blurred = cv2.GaussianBlur(img, (5, 5), 0, 0)
```
如果您仍然遇到问题,请提供更多的代码信息和上下文,这样我才能更好地帮助您解决问题。
相关问题
cv2.error: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'GaussianBlur'
cv2.error: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'GaussianBlur' 是OpenCV库中的一个错误。这个错误通常在使用GaussianBlur函数时出现,它表示函数的参数存在问题。
GaussianBlur函数是OpenCV中用于对图像进行高斯模糊处理的函数。它的语法如下:
```
dst = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
```
其中,参数说明如下:
- src:输入图像。
- ksize:高斯核的大小,必须是正奇数。
- sigmaX:X方向上的高斯核标准差。
- dst:输出图像,可选参数。
- sigmaY:Y方向上的高斯核标准差,可选参数。
- borderType:边界扩充方式,可选参数。
出现这个错误的原因可能是传递给函数的参数不符合要求。请检查你传递给GaussianBlur函数的参数是否正确,并确保ksize是正奇数。
报错 cv2.error: OpenCV(4.5.4) :-1: error: (-5:Bad argument) in function 'inRange' > Overload resolution failed: > - src is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'src'
根据错误提示,`inRange` 函数期望的参数类型是 `numpy` 数组或 `UMat` 类型。你可以将 `jietushuju` 对象转换为 `numpy` 数组类型,然后再传递给 `remove_colors_except` 函数。修改代码如下:
```python
import numpy as np
import cv2
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
class fangfa:
def jietu(self, hwnd):
img = screen.grabWindow(hwnd).toImage()
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
img.save(buffer,"bmp")
dd = Image.open(buffer)
#dd.save("1.bmp")
return dd
def remove_colors_except(self, image, target_colors, threshold):
image = np.array(image)
result = np.zeros_like(image)
for target_color in target_colors:
#例如 target_colors = ['FF0000', '00FF00', '0000FF']
# 将目标色格式 "FFFFFF" 转换成 RGB 值
blue = int(target_color[0:2], 16)
green = int(target_color[2:4], 16)
red = int(target_color[4:6], 16)
# 计算目标颜色的范围
lower_range = np.array([blue - threshold, green - threshold, red - threshold])
upper_range = np.array([blue + threshold, green + threshold, red + threshold])
# 创建掩码,将目标颜色范围以外的像素设为黑色,目标颜色范围内的像素设为白色
mask = cv2.inRange(image, lower_range, upper_range)
# 将目标颜色范围内的像素设为白色
result[mask > 0] = (255, 255, 255)
# 显示结果图像
cv2.imwrite('222.bmp', result)
return result
ff = fangfa()
def main():
hwnd = ff.huoqujubin('【魔域】')
if hwnd != []:
jietushuju = ff.jietu(hwnd)
ff.remove_colors_except(jietushuju, ['FFFFFF'], 0)
```
在修改后的代码中,我们首先将 `jietushuju` 对象转换为 `numpy` 数组类型,然后再传递给 `remove_colors_except` 函数。这样就能够避免出现 `inRange` 函数参数类型错误的问题。
阅读全文