计算机视觉结合深度学习项目-智能停车场空车位实时识别_大厦智能停车场空余车位算法(1)

    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)

这里这几个点是根据自己的项目而言的,我们目的就是用这六个点把整个停车场框起来,然后对框出来的图像进行一个提取。也称之为一个ROI区域。结果是这样。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3ef76f832bc54291809158fdd0ecb85e.png)  
 这里的坐标我们自己进行定位操作,然后我们制造一个掩码图像,就是把标记的这六个点规划成一个区域ROI region,然后把区域内设置成白色像素值,把区域外设置成全黑像素值。然后做一个相当于图像和掩码的与操作。得到的结果就是:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/edd9b99f3cc14e918bdf22f7298d41fe.png)  
 最后得到的ROI区域就是:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b44a5bd98fff4e7bbfc3a2ca6952c162.png)  
 这里我们就得到了一个停车场的大致轮廓,然后我们开始对停车场车位进行具体操作,首先我们先要检测一个停车场直线的操作,使用霍夫直线检测来做这个项目。



def hough\_lines(self,image):       
    return cv2.HoughLinesP(image, rho=0.1, theta=np.pi/10, threshold=15, minLineLength=9, maxLineGap=4)

这里霍夫直线检测是定义好的一个模型,我们直接调用就可以。这里的参数我们介绍一下。



> 
> **image:表示要处理的图像。**  
>  **rho:表示处理的精度。精度越小检测的直线越精确,精度值设置的数值越大,那么检测的线段就越少。**  
>  **theta:检测的直线角度,表示直线的角度不能超过哪个数值。如果超过这个阈值,就不定义为一条直线。**  
>  **threshold:线的点定义阈值为15,这个要根据实施项目而定,构成线的像素点超过15才可以构成一条直线。**  
>  **minLineLength:最小长度,这个不用过多解释,线的长度最小就是9.**  
>  **maxLineGap:线和线之间最大的间隔阈值,离得多近的都认为是一条直线。**
> 
> 
> 


输入的图像需要是边缘检测后的结果,minLineLengh(线的最短长度,比这个短的都被忽略)和MaxLineCap(两条直线之间的最大间隔,小于此值,认为是一条直线)。rho距离精度,theta角度精度,threshod超过设定阈值才被检测出线段。



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

这里面对检测到的霍夫直线继续做一个过滤的操作,如果直线的长度大于25,小于55,我们就添加
  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Opencv停车场空余车位检测的示例代码,仅供参考: ```python import cv2 # 读取停车场图像 img = cv2.imread('parking_lot.jpg') # 转换颜色空间为灰度 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对图像进行高斯模糊 blur = cv2.GaussianBlur(gray, (5, 5), 0) # 进行Canny边缘检测 edges = cv2.Canny(blur, 50, 150) # 对边缘图像进行形态学操作,填充小孔洞 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) # 查找轮廓 contours, hierarchy = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 遍历所有轮廓,判断是否为空余车位 for contour in contours: # 计算轮廓面积 area = cv2.contourArea(contour) # 如果面积小于一定阈值,则认为是噪声 if area < 1000: continue # 计算轮廓周长 perimeter = cv2.arcLength(contour, True) # 计算轮廓近似多边形 approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True) # 如果近似多边形有4个顶点,则认为是矩形车位 if len(approx) == 4: # 计算车位中心坐标 M = cv2.moments(contour) cx = int(M['m10'] / M['m00']) cy = int(M['m01'] / M['m00']) # 在图像上绘制车位中心点 cv2.circle(img, (cx, cy), 5, (0, 255, 0), -1) # 显示结果图像 cv2.imshow('Parking Lot', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 注意:这只是一个简单的示例代码,实际应用中需要根据具体场景进行调整和优化。同时,由于车位的颜色和形状可能会有很大差异,因此需要进行充分的测试和训练,以确保算法的准确性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值