loc = cv2.findNonZero(res > threshold) cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'findNonZero' > Overload resolution failed: > - src data type = 0 is not supported > - Expected Ptr<cv::UMat> for argument 'src'
时间: 2023-08-28 21:17:37 浏览: 182
解决python多线程报错:AttributeError: Can't pickle local object问题
这个错误可能是由于输入的数组`res > threshold`不是一个NumPy数组而是一个OpenCV的矩阵或图像,导致了`cv2.findNonZero()`函数的错误。
为了解决这个问题,可以将`res > threshold`转换为NumPy数组,然后再传给`cv2.findNonZero()`函数。可以使用`np.array()`函数将OpenCV矩阵或图像转换为NumPy数组,示例如下:
```python
import numpy as np
# 将OpenCV矩阵或图像转换为NumPy数组
res_np = np.array(res > threshold, dtype=np.uint8)
# 在NumPy数组中查找非零像素的位置
loc = cv2.findNonZero(res_np)
```
在上述代码中,我们使用`np.array()`函数将`res > threshold`转换为了一个NumPy数组,并指定了数据类型为`np.uint8`,即无符号8位整型。然后,我们将该数组传给了`cv2.findNonZero()`函数,成功地找到了非零像素的位置。
需要注意的是,如果输入的数组是一个OpenCV的图像,可以使用`cv2.cvtColor()`函数将其转换为灰度图像或者其他格式的图像,然后再将其转换为NumPy数组。
阅读全文