首页 > 解决方案 > 检测图像的主要对象并去除背景

问题描述

我需要检测图像中的主要(前)汽车,以将其放入另一个没有背景或背景纯色的图像中。下面是一个示例图像:

原始图像

我正在使用 OpenCV 4 在 Python 3 中进行开发。

我尝试了 HaarCascade,但效果不佳,即使在 detectMultiScale 中有许多不同的超参数:

car_cascade = cv2.CascadeClassifier('./haarcascade/haarcascade_car.xml') 

car_detected = car_cascade.detectMultiScale(img_gray1, 2.2, 4)

cars_with_detections = np.copy(img1)

for (x, y, w, h) in car_detected:
    cv2.rectangle(cars_with_detections, (x, y), (x+w, y+h), (255, 0, 0), 5)

plt.figure(figsize=(25,15))
plt.imshow(cars_with_detections)

哈卡斯卡德

标签: pythonopencvimage-processingcomputer-visionhaar-classifier

解决方案


由于其他红色汽车和杂项对象,此图像的背景很难移除(同时保留汽车的形状)。
我尝试了各种方法:模糊(高斯滤波器、箱形滤波器等)。

如果您只需要对一张图像执行此操作,并且只将汽车放入另一张图像中,则使用 Photoshop 和魔术棒工具可能会更好。

但是,通过 GRIP(图形表示图像处理)软件中的实验,我能够通过纯 OpenCV 处理非常接近。

这是我的管道: 原始图像: 图像处理管道

在此处输入图像描述

  1. CV 减法(减去汽车的“红色”颜色以获得汽车的深色斑点)
    红色的(红色) 减去

  2. HSV 阈值(用车身创建一个遮罩) 临界点

  3. 模糊(模糊 HSV 阈值以获得更坚实的蒙版) 模糊

  4. 查找轮廓(通过模糊蒙版查找车身轮廓) 轮廓

  5. 蒙版(将蒙版应用于原始图像以获取汽车的像素) 面具

我知道我的代码可能没有产生您希望的结果,但我希望您感谢我的努力和时间以及我的替代解决方案。

这是下载GRIP的链接

这是将图像处理管道代码下载为 Python 文件和 GRIP 文件的链接


推荐阅读