locs = cv2.findNonZero(res > threshold) TypeError: Expected Ptr<cv::UMat> for argument 'src'
时间: 2023-06-27 11:05:29 浏览: 61
该错误提示表明您传递给cv2.findNonZero()函数的参数类型不正确。参数'src'应该是一个指向cv::UMat类型的指针,但是您传递的是一个res > threshold的逻辑运算结果,这可能不是一个有效的cv::UMat类型的指针。请确保在调用cv2.findNonZero()函数之前,您已经正确声明和初始化了cv::UMat类型的变量,并将其传递给该函数。如果您仍然在寻找解决方案,可以在Stack Overflow等技术论坛上的 OpenCV 专业人员的帮助下寻求更多帮助。
相关问题
locs=[] contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for i in range(len(contours)): x,y,w,h =cv2.boundingRect(contours[i]) aspect_ratio = float(w)/h Area = w*h if Area>800 or Area<2000: if aspect_ratio>2 or aspect_ratio<3: if (w > 40 and w < 60) and (h > 15 and h < 35): locs.append((x, y, w, h)) locs=sorted(locs,key=lambda x:x[0])#将筛选之后的轮廓数据进行排序 print(locs) 对于上面locs列表,存放着(x,y,w,h),如果列表里面有一个元素与其他几个元素y值相差较大,如何去除这个元素
可以通过计算所有元素y值的平均值和标准差,判断某个元素的y值是否明显偏离,从而将其剔除。具体实现可以按以下步骤进行:
1. 计算所有元素y值的平均值和标准差
```
import numpy as np
y_values = [loc[1] for loc in locs]
mean_y = np.mean(y_values)
std_y = np.std(y_values)
```
2. 遍历列表,判断每个元素的y值是否偏离平均值超过标准差的2倍
```
filtered_locs = []
for loc in locs:
if abs(loc[1] - mean_y) <= 2 * std_y:
filtered_locs.append(loc)
```
3. filtered_locs 列表中即为剔除掉明显偏离的元素后的结果,可以直接使用。
解释locs = self.ax1.get_xticks()
这是一行 Python 代码,其中 `self.ax1` 是一个 Matplotlib 的 subplot 对象。`get_xticks()` 是 subplot 对象的一个方法,用于获取当前 x 轴的刻度位置。这个方法返回一个包含当前 x 轴刻度位置的列表 `locs`。通常,我们可以在获取这个列表之后对它进行一些操作,比如修改刻度位置或者设置刻度标签。