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值相差较大,如何去除这个元素
时间: 2024-04-03 14:35:00 浏览: 107
Python通过OpenCV的findContours获取轮廓并切割实例
5星 · 资源好评率100%
可以通过计算所有元素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 列表中即为剔除掉明显偏离的元素后的结果,可以直接使用。
阅读全文