1. 解决问题和痛点:
在本地电脑安装opencv和numpy科学计算包,即可运行如下代码。本代码主要解决的问题是如何将YOLO算法产出的带颜色的矩形框去除。
2. 案例试用代码:
import cv2
import numpy as np
import os
def remove_red_boxes(image_path, output_path):
# 读取图像
img = cv2.imread(image_path)
if img is None:
print(f"Error: Could not read image {image_path}")
return
# 将图像从BGR转换为HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义红色范围的阈值(HSV空间)
lower_red1 = np.array([0, 50, 50])
upper_red1 = np.array([50, 255, 255])
lower_red2 = np.array([0, 50, 50])
upper_red2 = np.array([180, 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.zeros((1, 1), np.uint8)
red_mask = cv2.dilate(red_mask, kernel, iterations=1)
# 图像修复
result = cv2.inpaint(img, red_mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA)
# 保存结果
cv2.imwrite(output_path, result)
if __name__ == '__main__':
# 等待处理图片文件夹
input_dir = "train_images/"
# 处理后保存结果文件夹
output_dir = "cleaned_images/"
for filename in os.listdir(input_dir):
if filename.endswith(".jpg") or filename.endswith(".png"):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
remove_red_boxes(input_path, output_path)