python删除图片中有红色矩形的图片。包含红色矩形的图片会被删除。
import cv2
import os
import numpy as np
def detect_red_rectangles(image_path):
# 读取图片
image = cv2.imread(image_path)
if image is None:
return False
# 将图片从BGR颜色空间转换为HSV颜色空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义红色的HSV范围(OpenCV中H范围为0-179)
lower_red1 = np.array([0, 100, 100]) # 红色范围1
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100]) # 红色范围2(因为红色在HSV空间中有两个范围)
upper_red2 = np.array([179, 255, 255])
# 创建红色区域的掩码
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
red_mask = cv2.bitwise_or(mask1, mask2)
# 对掩码进行形态学操作,去除噪声
kernel = np.ones((5, 5), np.uint8)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)
red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_CLOSE, kernel)
# 查找红色区域的轮廓
contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓,检测矩形
for contour in contours:
# 计算轮廓的近似多边形
epsilon = 0.02 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)
# 如果近似多边形有4个顶点,则认为是矩形
if len(approx) == 4:
return True
return False
def delete_images_with_red_rectangles(folder_path):
# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
image_path = os.path.join(folder_path, filename)
if detect_red_rectangles(image_path):
print(f"Deleting {image_path} because it contains a red rectangle.")
os.remove(image_path)
if __name__ == "__main__":
folder_path = r'E:\images' # 替换为你的文件夹路径
delete_images_with_red_rectangles(folder_path)