【问题标题】:How to detect empty park space using morphologyEx and drawContours?如何使用morphologyEx和drawContours检测空的公园空间?
【发布时间】:2019-12-31 12:33:21
【问题描述】:

我有以下图像,其中有无人机捕获的汽车和空停车位。我想检测空的公园空间并绘制一个看起来像预期图像的框。

这是我的代码:

import cv2
import numpy as np 
from matplotlib import pyplot as plt
%matplotlib inline 

img = cv2.imread('parking.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)        
gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)     
blurred = cv2.bilateralFilter(gray,21,41,41)         
edged = cv2.Canny(blurred,400,600)        
thresh = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 40)    

mask = cv2.bitwise_not(edged)    
thresh = cv2.bitwise_and(thresh,thresh,mask=mask)     
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))    
thresh = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel)    
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 

output = img.copy()     
cv2.drawContours(output, contours, -1, (0,255,0), 1)    
plt.imshow(output)

问题是它检测到所有现有的矩形。如何减少轮廓以仅检测车辆?

输入图像:

输出图像:

我试图获得的,预期的输出:

【问题讨论】:

  • 我认为依靠简单的形态学运算和轮廓检测来解决这个问题没有一种稳健的方法。更好的方法是使用深度学习,例如训练 HOG 对象检测器或 CNN。看看this 使用Mask R-CNN 解决这个问题的文章

标签: python python-3.x opencv image-processing contour


【解决方案1】:

我认为这种方法行不通。有两种方法可以解决这个问题:

  1. 训练对象检测神经网络以找到空白空间。这将产生最准确的预测,但实施起来有点困难,并且需要带注释的数据集。

  2. 使用主要背景颜色(相当均匀)来获得“空白”空间,然后处理 blob 以确定汽车之间或您在代码中检测到的框架内的空白区域

您可以通过添加corner detection 来查找停车位的角落,从而提高检测质量。有些可能会被汽车遮挡,但您将有足够的数据点来找到正确分割空间的序列。

不幸的是,所有这些都需要更多的编码才能包含在答案中,但希望它能给你一些方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2010-10-29
    • 2021-04-21
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多