手把手教学,OpenCV计算机视觉实战—停车场车位识别(完整代码),不信你还学不会

任务描述:识别这种停车场图的 空车位被占用车位
识别流程:预处理 -> 获得车位坐标的字典 -> 训练VGG网络进行二分类

img_process 图像预处理过程

粉丝福利:领完再看!配套资料以及迪迦给大家准备的250G人工智能学习资料礼包内含:两大Pytorch、TensorFlow实战框架视频、图像识别、OpenCV、计算机视觉、深度学习与神经网络等等等视频、代码、PPT以及深度学习书籍

只需要你点个关注,然后扫码添加助手小姐姐VX即可无套路领取!

  扫码添加即可

1.select_rgb_white_yellow 过滤背景(得到mask)

inRange(图,min阈值,max阈值) 小于min(大于max)的为0,min-max的为255
dst = cv.bitwise_and(src1, src2[, dst[, mask]]
src1:图1 src2:图2 mask:图1和图2’与’操作的掩码输出图像

def select_rgb_white_yellow(self,image): 
    # 过滤掉背景
    lower = np.uint8([120, 120, 120])
    upper = np.uint8([255, 255, 255])
    # lower_red和高于upper_red的部分分别变成0,lower_red~upper_red之间的值变成255,相当于过滤背景
    white_mask = cv2.inRange(image, lower, upper)
    self.cv_show('white_mask',white_mask)
    
    masked = cv2.bitwise_and(image, image, mask = white_mask)
    self.cv_show('masked',masked)
    return masked

2.convert_gray_scale # rgb转gray图

3.detect_edges # Canny检测

def convert_gray_scale(self,image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
def detect_edges(self,image, low_threshold=50, high_threshold=200):
    return cv2.Canny(image, low_threshold, high_threshold)

4.select_region # 针对当前任务手动指定区域

cv2.circle(img,中心点(x,y),半径r,color,粗细) 根据给定的圆心和半径等画圆 画出指定点

5.filter_region # 基于指定点剔除掉不需要的地方

np.zeros_like(img) # 生成一个跟img数组一样大小的 全0(黑)的数组
cv2.fillPoly(mask, vertices, 255) # 在mask上画多边形,由这vertices的点组成的,填充为白色
cv2.bitwise_and # 只在mask为255上才能留下来其他就过滤掉了

def filter_region(self,image, vertices):
    """
            剔除掉不需要的地方
    """
    mask = np.zeros_like(image)
    if len(mask.shape)==2:
        cv2.fillPoly(mask, vertices, 255)
        self.cv_show('mask', mask)    
    return cv2.bitwise_and(image, mask)

def select_region(self,image):
    """
            手动选择区域
    """
    # first, define the polygon by vertices
    rows, cols = image.shape[:2]
    pt_1  = [cols*0.05, rows*0.90]
    pt_2 = [cols*0.05, rows*0.70]
    pt_3 = [cols*0.30, rows*0.55]
    pt_4 = [cols*0.6, rows*0.15]
    pt_5 = [cols*0.90, rows*0.15] 
    pt_6 = [cols*0.90, rows*0.90]

    vertices = np.array([[pt_1, pt_2, pt_3, pt_4, pt_5, pt_6]], dtype=np.int32) 
    point_img = image.copy()       
    point_img = cv2.cvtColor(point_img, cv2.COLOR_GRAY2RGB)
    for point in vertices[0]:
        cv2.circle(point_img, (point[0],point[1]), 10, (0,0,255), 4)
    self.cv_show('point_img',point_img)
    
    return self.filter_region(image, vertices)

6.hough_lines # 找直线

HoughLinesP函数是统计概率霍夫线变换函数,该函数能输出检测到的直线的端点 (x_{0}, y_{0}, x_{1}, y_{1}),
其函数原型为:HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]]) -> lines
cv2.HoughLinesP(边缘检测后的二值图) 统计概率霍夫线变换函数

7.draw_lines # 过滤线

abs(y2-y1) <=1 不要斜线
abs(x2-x1) >=25 and abs(x2-x1) <= 55 长度太长的也不要

def hough_lines(self,image):
    # 输入的图像需要是边缘检测后的结果
    # minLineLengh(线的最短长度,比这个短的都被忽略)和MaxLineCap(两条直线之间的最大间隔,小于此值,认为是一条直线)
    # rho距离精度,theta角度精度,threshod超过设定阈值才被检测出线段
    return cv2.HoughLinesP(image, rho=0.1, theta=np.pi/10, threshold=15, minLineLength=9, maxLineGap=4)
    
def draw_lines(self,image, lines, color=[255, 0, 0], thickness=2, make_copy=True):
    # 过滤霍夫变换检测到直线
    if make_copy:
        image = np.copy(image) 
    cleaned = []
    for line in lines:
        for x1,y1,x2,y2 in line:
            if abs(y2-y1) <=1 and abs(x2-x1) >=25 and abs(x2-x1) <= 55:
                cleaned.append((x1,y1,x2,y2))
                cv2.line(image, (x1, y1), (x2, y2), color, thickness)
    print(" No lines detected: ", len(cleaned))
    return image

8.identify_blocks # 区域划分

step 3: 指定行间距小于10的,划分为不同的列,共12簇

def identify_blocks(self,
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: opencv停车场车位识别代码实现了一个简单的车位检测和计数系统。这个系统通过图像处理技术,从一段监控视频中识别并计数停车场中的空闲车位数量。 首先,代码采用了背景差分的方法,用来检测场景中的移动物体。这个过程包括以下几个步骤:首先,读取一帧图像作为背景模型。然后,对于输入的视频流的每一帧,将其与背景模型进行比较,得到差分图像。接着,对差分图像进行阈值处理,得到二值图像,即车辆区域的前景。 接下来,代码进行形态学运算,通过腐蚀和膨胀操作来去除噪点和连通分量的不连续性,以得到更完整的车辆区域。 然后,代码采用轮廓检测的方法,找到图像中所有的轮廓对象。为了过滤掉不是车辆的轮廓,可以引入一些几何特征的条件,比如面积、宽高比等。通过这些条件,筛选出可能是车辆的轮廓,并将其绘制在原始帧上。 最后,代码通过计数筛选出的车辆轮廓数,来估计停车场中的空闲车位数量。这个计数可以根据检测到的车辆轮廓数来实现,每次检测到新增的车辆轮廓,计数加一;每次检测到消失的车辆轮廓,计数减一。通过这个计数结果,可以判断出停车场中的空闲车位数量。 综上所述,opencv停车场车位识别代码通过背景差分、形态学运算和轮廓检测等图像处理技术,实现了对停车场车位检测和计数。这个代码可以应用于实际的停车场系统中,提供准确的空闲车位信息,方便车主实时了解停车场的状况。 ### 回答2: OpenCV停车场车位识别代码可以用于自动检测识别停车场中的空闲和占用车位。此代码的解释如下: 1. 首先,代码会加载和初始化一个训练好的车辆检测模型。这个模型可以识别出车辆的存在和位置。 2. 然后,代码会获取停车场的图像或视频,并对其进行预处理。预处理的步骤可能包括图像平滑、灰度转换、尺寸调整和直方图均衡化等。 3. 接下来,代码会使用车辆检测模型在预处理后的图像中进行车辆检测。模型会在图像中寻找与车辆匹配的特征,并输出车辆的位置和边界框。 4. 一旦检测到车辆,代码会对边界框进行进一步处理,以确定它是否代表空闲或占用的车位。这可以通过比较车辆与已知空闲车位的位置和尺寸来实现。 5. 最后,代码会根据车位的状态,在图像上标注出空闲和占用车位的位置,或者输出相应的结果。 总的来说,这个代码可以用于实时监控停车场的状态,并自动识别出空闲和占用车位的情况。它可以帮助管理者更好地管理停车场资源,提供更好的停车体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值