Python OpenCV: 筛选 RGB 图像中大于平均大小的轮廓
以下是一个 Python 程序的示例,用于根据 RGB 图像中所有轮廓大小的平均值,筛选原图中轮廓大于平均值的图像部分并保存。
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg')
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 进行边缘检测
edges = cv2.Canny(gray, 50, 150)
# 找到轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算所有轮廓的大小
contour_sizes = [cv2.contourArea(contour) for contour in contours]
# 计算轮廓大小的平均值
average_contour_size = np.mean(contour_sizes)
# 筛选出轮廓大于平均值的部分
filtered_contours = [contour for contour in contours if cv2.contourArea(contour) > average_contour_size]
# 创建一个空白画布
mask = np.zeros_like(image)
# 在画布上绘制筛选出的轮廓
cv2.drawContours(mask, filtered_contours, -1, (255, 255, 255), thickness=cv2.FILLED)
# 将原图与筛选出的轮廓部分进行位运算,提取出轮廓部分
filtered_image = cv2.bitwise_and(image, mask)
# 保存筛选出的图像部分
cv2.imwrite('filtered_image.jpg', filtered_image)
请确保将程序中的'image.jpg'替换为你要处理的实际图像文件路径。筛选出的图像部分将保存为'filtered_image.jpg'。
原文地址: https://www.cveoy.top/t/topic/qiJ7 著作权归作者所有。请勿转载和采集!