Python:图像轮廓经过特定区域的筛选
2025-04-13 本文已影响0人
大龙10
一、步骤
- 为了筛选出所有经过 y=1300±200 区域的轮廓,可以按照以下步骤进行:
- 图像预处理:使用Canny边缘检测获取图像边缘。
- 轮廓检测:找到所有轮廓。
- 轮廓筛选:检查每个轮廓的Y坐标范围,判断是否与目标区域重叠。
二、程序
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 12 09:20:29 2025
ds004.py
"""
import cv2
import numpy as np
# 读取图像并转为灰度图
image = cv2.imread(r'd:/imgs/bak01/my_img01-B2.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用Canny边缘检测(阈值根据实际情况调整)
edges = cv2.Canny(gray, 50, 150)
# 查找所有轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# 目标Y轴范围
y_min, y_max = 1100, 1500
# 筛选符合条件的轮廓
selected_contours = []
for cnt in contours:
y_coords = cnt[:, 0, 1] # 提取所有Y坐标
cnt_min_y, cnt_max_y = np.min(y_coords), np.max(y_coords)
# 判断轮廓的Y范围是否与目标区域重叠
if cnt_max_y >= y_min and cnt_min_y <= y_max:
selected_contours.append(cnt)
# 可选:绘制筛选后的轮廓
result = cv2.drawContours(image.copy(), selected_contours, -1, (0, 255, 0), 2)
zoom_xs=0.2
new_img2 = cv2.resize(result, None, fx=zoom_xs, fy=zoom_xs)
cv2.imshow('Continuous Lines', new_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、运行结果