OpenCV 轮廓筛选:提取面积大于平均值的轮廓
以下是一个示例程序,使用OpenCV库来进行图像处理和轮廓筛选,并保存符合条件的轮廓。
import cv2
import numpy as np
# 读取图像
image = cv2.imread('input.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算所有轮廓的面积
areas = [cv2.contourArea(cnt) for cnt in contours]
# 计算平均面积
mean_area = np.mean(areas)
# 筛选出面积超过平均面积的轮廓
filtered_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > mean_area]
# 绘制筛选后的轮廓并保存
output = np.zeros_like(image)
cv2.drawContours(output, filtered_contours, -1, (0, 255, 0), 2)
cv2.imwrite('output.jpg', output)
在上面的示例中,首先读取输入图像并将其转换为灰度图像。然后,通过阈值处理将图像二值化,以便更好地进行轮廓检测。然后使用cv2.findContours函数查找图像中的轮廓。接下来,计算所有轮廓的面积,并计算平均面积。最后,筛选出面积超过平均面积的轮廓,并在输出图像中绘制这些轮廓,并保存为output.jpg。
原文地址: https://www.cveoy.top/t/topic/qiKw 著作权归作者所有。请勿转载和采集!