写一个程序:根据RGB图像中所有轮廓大小的平均值筛选原图中轮廓大于平均值的图像部分并跟据筛选后轮廓坐标提取原图中位于为轮廓内的图像
这是一个使用OpenCV库来实现的Python程序。首先,需要安装OpenCV库。
import cv2
import numpy as np
# 读取RGB图像
image = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 计算轮廓大小的平均值
total_size = 0
for contour in contours:
total_size += cv2.contourArea(contour)
average_size = total_size / len(contours)
# 筛选轮廓大于平均值的图像部分
filtered_contours = []
for contour in contours:
if cv2.contourArea(contour) > average_size:
filtered_contours.append(contour)
# 创建一个空白图像,用于绘制轮廓
contour_image = np.zeros_like(image)
# 绘制筛选后的轮廓
cv2.drawContours(contour_image, filtered_contours, -1, (0, 255, 0), 2)
# 提取原图中位于筛选后轮廓内的图像部分
extracted_image = np.zeros_like(image)
for contour in filtered_contours:
x, y, w, h = cv2.boundingRect(contour)
extracted_image[y:y+h, x:x+w] = image[y:y+h, x:x+w]
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Contours', contour_image)
cv2.imshow('Extracted Image', extracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
请将上述代码保存为一个Python文件,然后将名为“image.jpg”的RGB图像文件与该脚本文件放在同一目录下。运行程序后,将会显示原始图像、筛选后的轮廓图像以及提取的位于轮廓内的图像部分
原文地址: https://www.cveoy.top/t/topic/iB19 著作权归作者所有。请勿转载和采集!