精华内容
下载资源
问答
  • STM32停车场车位引导显示系统论文
  • 停车场车位控制系统

    2012-09-28 16:48:43
    本文阐述了停车场车位控制系统的PLC控制、自动计数、数码显示的一些基本思路和方法,介绍了关于PLC工作特点及运行原理,S7-200不仅编程简单,通用性强,抗干扰能力强,可靠性高,而且具有易于操作及维护,设计、施工...
  • 介绍一种停车场车位自动化管理系统的新设计。该系统设计通过超声传感器、单片机控制、嵌入式无线串口通讯模块以及星形通信网络技术的有机结合,可自动完成车位信息采集管理和显示功能,从而优化了停车场管理,方便了...
  • 为了提高停车场的使用效率,让人们更快的找到空闲车位,实现停车场空车位的快速自动寻找,本文设计了一种以视频图像为研究对象,自动识别停车场车位的视频检测系统。与以往基于超声波、红外或地感线圈等传感器为主的车位...

    摘要:

    随着人们生活水平的提升,私人轿车的数量在不断增加,由于城市的人口密度很大,使得停车难的问题越来越突出。为了提高停车场的使用效率,让人们更快的找到空闲车位,实现停车场空车位的快速自动寻找,本文设计了一种以视频图像为研究对象,自动识别停车场车位的视频检测系统。与以往基于超声波、红外或地感线圈等传感器为主的车位检测技术不同,本系统主要由采集车位视频图像、预处理、车位检测以及界面显示几个部分组成。首先在停车场的合理位置设置摄像头以获取车位视频图像,为提高检测的准确性,对其进行预处理。车位检测是该检测系统的核心部分,所设计的车位检测算法的原理是基于视频图像检测车位的车位组合状态网络模型,在最大后验概率的意义下,求解最可能的车位状态。 在检测车位状态时,首先获取车位的检测区域,然后将RGB车位图像转换成改进后的HSI车位图像,并对该图像像素进行贝叶斯分类。建立车位的伪训练模型,预先训练出车位状态不同时,各像素的条件统计概率,以便计算出相邻车位状态的传递概率,最后通过对车位组合状态网络进行优化,确定出最佳的可能车位状态。最后,将车位检测结果通过人机界面显示出来,更加方便人们对停车场状态的观察和控制。 该方法充分的利用了先验知识,不但可以减轻环境光线变化对车位检测造成的影响,还可以较好的解决车辆相互遮挡所造成的误判问题,进而更准确的检测出车位的占有状态。实验表明该方法具有较高的准确性与鲁棒性,特别是可以较好地减轻车辆相互遮挡和环境光线变化对检测结果造成的影响。

    展开

    展开全文
  • 模拟临大停车场车位管理系统 首页显示: 欢迎来到临沂大学 空闲停车位n个(n个灯亮) “by姓名” 按下K1(停车位数递减),显示“欢迎来到临沂大学,停车位剩余n个”。连续按n次,显示“没有空闲停车位”。 按...
  • 使用Opencv对停车场剩余车位数量进行识别,所有代码不用类不用函数,适合初学者学习,详细介绍可以参考我的博文:https://blog.csdn.net/qq_36758914/article/details/104041779
  • 以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。 功能描述: 1、采用51单片机作为主控芯片; 2、采用红外避障...

    随着人们生活水平的提高,汽车的数量也与日俱增,于是停车正在成为世界性的问题。以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。

     

    功能描述

    1、采用51单片机作为主控芯片;

    2、采用红外避障传感器作为计数电路;

    3、采用LCD1602作为显示模块;

    4、当剩余车位数为0时,蜂鸣器报警、红灯亮(平时绿灯亮);

     

    按键说明

    1、设置键:设置车位总量;

    2、加值键:对设置值+1操作;

    3、减值键:对设置值-1操作;

     

    整体方案

     

    电路设计

    采用Altium Designer作为电路设计工具。Altium Designer通过把原理图设计、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。

     

    仿真设计

    采用Proteus作为仿真设计工具。Proteus是一款著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

     

    博主福利:100G电子设计学习资源包!

    http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect

    --------------------------------------------------------------------------------------------------------------------------

    展开全文
  • 基于CC2530 ZIGBEE的物联网车位管理系统。 系统由下列部分组成: 车位探测器,采用干电池供电。...车位指示灯, 检测到有车显示红色,没车显示绿色。 后台管理系统,汇集所有车位信息,以微信或APP的方式推给用户。
  • FreeRTOS课程设计之临沂大学停车场车位管理系统(一) 先看一下效果吧 1.作品要求 模拟临大停车场车位管理系统 首页显示: 欢迎来到临沂大学 空闲停车位n个(n个灯亮) “by姓名” 按下K1(停车位数递减),显示...

    FreeRTOS课程设计之临沂大学停车场车位管理系统(一)

    先看一下效果吧

    1.作品要求

    模拟临大停车场车位管理系统

    首页显示:

    欢迎来到临沂大学

    空闲停车位n个(n个灯亮)

    “by姓名”

    按下K1(停车位数递减),显示“欢迎来到临沂大学,停车位剩余n个”。连续按n次,显示“没有空闲停车位”。

    按下K2(停车位数递增),显示“欢迎再来临沂大学,停车位空余n个”。

    按下K3,挂起任务1. 灯闪烁。

    按下K4,恢复任务1. 灯全亮。

    加分项:
    功能的扩展与创意。

    2.实现思路

    • 需要用到 LED、OLED、按键等外设
    • 使用FreeRTOS实时操作系统
    • 需要创建几个任务、任务之间如何安排、数据如何传递?
    • 想好这些之后,再开始敲代码之前画个图吧!

    image-20201217201146378

    主要创建4个任务,这4个任务如上图所示,如何把这几个任务联系起来?

    当然是通过信号量了

    老师说,信号量可以在任务之间传递,但我没怎么用上,偷了个懒,定义了一个chewei(车位变量),Take与Give这两个任务就是对这个变量进行操作,使其–、++。

    LED_Task则是根据chewei信息及时更新LED与OLED显示。

    KEY_Task则是挂起与恢复 前两个任务。

    这样就是大体的思路了。

    3.主要代码

    3.1 任务句柄的创建
    /**************************** 任务句柄 ********************************/
    /* 
     * 任务句柄是一个指针,用于指向一个任务,当任务创建好之后,它就具有了一个任务句柄
     * 以后我们要想操作这个任务都需要通过这个任务句柄,如果是自身的任务操作自己,那么
     * 这个句柄可以为NULL。
     */
    static TaskHandle_t AppTaskCreate_Handle = NULL;/* 创建任务句柄 */
    static TaskHandle_t Take_Task_Handle = NULL;/* Take_Task任务句柄 */
    static TaskHandle_t Give_Task_Handle = NULL;/* Give_Task任务句柄 */
    static TaskHandle_t KEY_Task_Handle = NULL;/* KEY任务句柄 */
    static TaskHandle_t LED_Task_Handle = NULL;/* LED任务句柄 */
    
    3.2 AppTaskCreate任务
    /***********************************************************************
      * @ 函数名  : AppTaskCreate
      * @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
      * @ 参数    : 无  
      * @ 返回值  : 无
      **********************************************************************/
    static void AppTaskCreate(void)
    {
      BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
      
      taskENTER_CRITICAL();           //进入临界区
      
      /* 创建Test_Queue */
      CountSem_Handle = xSemaphoreCreateCounting(4,4);	 
      if(NULL != CountSem_Handle)
        printf("CountSem_Handle计数信号量创建成功!\r\n");
    
      /* 创建Take_Task任务 */
      xReturn = xTaskCreate((TaskFunction_t )Take_Task, /* 任务入口函数 */
                            (const char*    )"Take_Task",/* 任务名字 */
                            (uint16_t       )512,   /* 任务栈大小 */
                            (void*          )NULL,	/* 任务入口函数参数 */
                            (UBaseType_t    )4,	    /* 任务的优先级 */
                            (TaskHandle_t*  )&Take_Task_Handle);/* 任务控制块指针 */
      if(pdPASS == xReturn)
        printf("创建Take_Task任务成功!\r\n");
      
      /* 创建Give_Task任务 */
      xReturn = xTaskCreate((TaskFunction_t )Give_Task,  /* 任务入口函数 */
                            (const char*    )"Give_Task",/* 任务名字 */
                            (uint16_t       )512,  /* 任务栈大小 */
                            (void*          )NULL,/* 任务入口函数参数 */
                            (UBaseType_t    )4, /* 任务的优先级 */
                            (TaskHandle_t*  )&Give_Task_Handle);/* 任务控制块指针 */ 
      if(pdPASS == xReturn)
        printf("创建Give_Task任务成功!\n\n");
    	/* 创建KEY_Task任务 */
      xReturn = xTaskCreate((TaskFunction_t )KEY_Task,  /* 任务入口函数 */
                            (const char*    )"KEY_Task",/* 任务名字 */
                            (uint16_t       )512,  /* 任务栈大小 */
                            (void*          )NULL,/* 任务入口函数参数 */
                            (UBaseType_t    )4, /* 任务的优先级 */
                            (TaskHandle_t*  )&KEY_Task_Handle);/* 任务控制块指针 */ 
      if(pdPASS == xReturn)
        printf("创建KEY_Task任务成功!\n\n");
    	/* 创建LED_Task任务 */
    	 xReturn = xTaskCreate((TaskFunction_t )LED_Task,  /* 任务入口函数 */
                            (const char*    )"LED_Task",/* 任务名字 */
                            (uint16_t       )512,  /* 任务栈大小 */
                            (void*          )NULL,/* 任务入口函数参数 */
                            (UBaseType_t    )4, /* 任务的优先级 */
                            (TaskHandle_t*  )&LED_Task_Handle);/* 任务控制块指针 */ 
      if(pdPASS == xReturn)
        printf("创建LED_Task任务成功!\n\n");
      
      vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
      
      taskEXIT_CRITICAL();            //退出临界区
    }
    
    3.3 Take_Task
    /**********************************************************************
      * @ 函数名  : Take_Task
      * @ 功能说明: Take_Task任务主体
      * @ 参数    :   
      * @ 返回值  : 无
      ********************************************************************/
    static void Take_Task(void* parameter)
    {	
      BaseType_t xReturn = pdTRUE;/* 定义一个创建信息返回值,默认为pdPASS */
      /* 任务都是一个无限循环,不能返回 */
      while (1)
      {
        //如果KEY1被单击	
    		if( 0 == HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)  )       
    		{  
    			delay_ms(80);
    			if( 0 == HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)  )
    			{
    			/* 获取一个计数信号量 */
    				xReturn = xSemaphoreTake(CountSem_Handle,	/* 计数信号量句柄 */
                                 0); 	/* 等待时间:0 */
    				if(chewei!=0){
    					chewei--;
    				
    				}
    					
    				
    				if ( pdTRUE == xReturn ) 
    					printf( "KEY1被按下,成功申请到停车位。\n" );
    				else
    					printf( "KEY1被按下,不好意思,现在停车场已满!\n" );	
    		  }			
    		}
    		vTaskDelay(20);     //每20ms扫描一次		
      }
    }
    
    3.4 Give_Task
    static void Give_Task(void* parameter)
    {	 
      BaseType_t xReturn = pdTRUE;/* 定义一个创建信息返回值,默认为pdPASS */
      /* 任务都是一个无限循环,不能返回 */
      while (1)
      {
        //如果KEY2被单击
    		if( 0 == HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) )  			
    		{
    			delay_ms(80);
    			if( 0 == HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) )
    			{
    			/* 获取一个计数信号量 */
          xReturn = xSemaphoreGive(CountSem_Handle);//给出计数信号量  
          chewei++;
    			
    				if ( pdTRUE == xReturn ) 
    					printf( "KEY2被按下,成功释放车位!\r\n" );
    				else
    					printf( "KEY2被按下,不好意思,无可释放车位!\r\n" );	
    				
    		  }		
    				
    	
    	
    		}
    		vTaskDelay(20);     //每20ms扫描一次	
      }
    }
    
    3.5 Key_Task
    static void KEY_Task(void* parameter)
    {	
      while (1)
      {
        if( 0 == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin))
    			{
    				delay_ms(80);
    			if( 1 == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) )
    			{
    				/* K3 被按下 */
    				printf("挂起任务\n");
    				vTaskSuspend(Take_Task_Handle);/* 挂起Take任务 */
    				vTaskSuspend(Give_Task_Handle);/* 挂起Give任务 */
    				printf("挂起任务成功!\n");
    				shining = 1;
    			}
    		}			
        if( 0 == HAL_GPIO_ReadPin(KEY4_GPIO_Port, KEY4_Pin) )
        {/* K4 被按下 */
    			delay_ms(80);
    			if( 0 == HAL_GPIO_ReadPin(KEY4_GPIO_Port, KEY4_Pin) )
    			{/* K4 被按下 */
    				printf("恢复任务!\n");
    				vTaskResume(Take_Task_Handle);/* 恢复Take任务! */
    				vTaskResume(Give_Task_Handle);/* 恢复Give任务! */
    				printf("恢复任务成功!\n");
    				shining = 0; 
    			}
    		}
    
        vTaskDelay(20);/* 延时20个tick */
      }
    }
    

    3.5LED_Task

    /**********************************************************************
      * @ 函数名  : LED_Task
      * @ 功能说明: LED_Task任务主体
      * @ 参数    :   
      * @ 返回值  : 无
      ********************************************************************/
    static void LED_Task(void* parameter)
    {	 
    	OLED_Clear();
    	OLED_ShowChinese_Row(0,0,*huanying); 
    	OLED_ShowChinese_Row(0,2,*shengyu); 
      while (1)
      {
    		pub++;
    				switch ( chewei ) 
    					{	
    						case 0:
    							LED1_OFF;
    							LED2_OFF;
    							LED3_OFF;
    							LED4_OFF;
    							OLED_ShowChinese_Row(0,0,*wukongxain);
    						  OLED_ShowString(0,2,"no free parking ");
    							OLED_ShowNum(64,4, chewei,1,15);
    							break; 
    						
    					  case 1:
    							LED1_OFF;
    						  LED2_OFF;
    						  LED3_OFF;
    						  LED4_ON;
    							if(shining==1){
    							delay_ms(500);
    							LED4_OFF;
    							delay_ms(500);
    						}
    
                  OLED_ShowNum(64,4, chewei,1,15);
    							break;
    					
    						case 2:
    							LED1_OFF;
    						  LED2_OFF;
    						  LED3_ON;
    						  LED4_ON;
    							if(shining==1){
    							delay_ms(500);
    							LED3_OFF;
    							LED4_OFF;
    							delay_ms(500);
    						}
    
                  OLED_ShowNum(64,4, chewei,1,15);
    
    							break;
    					
    						case 3:
    							LED1_OFF;
    						  LED2_ON;
    						  LED3_ON;
    						  LED4_ON;
    							if(shining==1){
    							delay_ms(500);
    							LED2_OFF;
    							LED3_OFF;
    							LED4_OFF;
    							delay_ms(500);
    						}
    
                  OLED_ShowNum(64,4, chewei,1,15);
    
    							break;
    					
    						case 4:
    							LED1_ON;
    						  LED2_ON;
    						  LED3_ON;
    						  LED4_ON;
    
    							if(shining==1)
    						{
    							delay_ms(500);
    							LED1_OFF;
    							LED2_OFF;
    							LED3_OFF;
    							LED4_OFF;
    							delay_ms(500);
    						}
                  OLED_ShowNum(64,4, chewei,1,15);
    
    							break;
    					
    						default: 
    						break;
    					}
    					//大概有1分钟上传一次数据
    			if(pub%2000==0){
    				pub = 0;
    			STM32DHT11_StatusReport();
    		}
      
    				
    		
    		vTaskDelay(20);     //每20ms扫描一次	
    	}
    }
    

    4.遇到一些问题

    4.1 按键不灵敏

    按键有些不灵敏,所要进行消抖

    我用的是软件延时消抖,效果还不错,延时时间为80ms

     if( 0 == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin))
    			{
    				delay_ms(80);
    			if( 1 == HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) )
    			{
    				/* K3 被按下 */
    			}
    		}
    

    HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin)

    至于为什么用这个函数?

    贴一张cubeMX配置图

    image-20201217203620724

    一般来说,需要区分这个GPIO口用于输入还是输出。

    如果是output,那个一般选择no pull,这样,引脚才能根据你的output数据,进行正确输出。

    如果是input,那么需要看具体应用的默认输入值是0还是1. 如果默认是输入0,则最好配置为pull down,反之则配置为pull up.

    一个接有上拉电阻的端口设为输入状态时,他的常态就为高电平,用于检测低电平的输入

    展开全文
  • Opencv项目实战:停车场车位识别

    千次阅读 2020-09-09 15:31:13
    项目:停车场车位识别 GITHUB地址 GITHUB 解决过程如下 形态学操作 对原始图像预处理操作,然后第一步给某一帧图像套上mask遮罩,原始图像和遮罩如下图所示: 然后对图片二值化等基本操作,得到的结果进行礼帽...

    项目:停车场车位识别


    GITHUB地址

    GITHUB

    解决过程如下

    形态学操作

    对原始图像预处理操作,然后第一步给某一帧图像套上mask遮罩,原始图像和遮罩如下图所示:

    img1
    img2

    然后对图片二值化等基本操作,得到的结果进行礼帽操作(TOPHAT),目的是去除干扰的白色车辆,效果如下图所示:

    img3

    垂直直线检测

    对图像进行霍夫变换,选择较大的阈值,将图像中的垂直直线检测出来,并使用abs(y2 - y1) >= 20 and abs(x2 - x1) <= 10的方法进行粗略的结果筛选,具体代码如下:

    lines = cv2.HoughLinesP(img, rho = 1, theta=np.pi, threshold=5, minLineLength=100, maxLineGap=40)
    
    img1 = np.zeros(org.shape, np.uint8)
    
    cleaned = []
    for line in lines:
        for x1, y1, x2, y2 in line:
            if abs(y2 - y1) >= 20 and abs(x2 - x1) <= 10:
                cleaned.append((x1, y1, x2, y2))
                cv2.line(img1, (x1, y1), (x2, y2), [255, 255, 255], 2)
    img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    imshow(img1)
    

    处理结果如下:
    img4

    之后对图像进行闭运算 + 开运算,去除未填补满的小洞以及毛刺部分,然后使用Canny边缘检测,检测出图像中的轮廓部分,处理结果如下:
    img5

    之后对边界进行轮廓检测,并找到外接矩形,然后即可获得每一大列(总共10列)的中心位置

    水平直线检测

    依然使用霍夫变换进行水平直线检测,此时选择较小的阈值,具体的代码如下:

    lines = cv2.HoughLinesP(img, rho = 0.1, theta=np.pi/10, threshold=18, minLineLength=10, maxLineGap=7)
    
    show = org.copy()
    
    cleaned = []
    for line in lines:
        for x1, y1, x2, y2 in line:
            if abs(x1 - x2) > 25 and abs(y1 - y2) < 10:
                cleaned.append((x1, y1, x2, y2))
                show = cv2.line(show, (x1, y1), (x2, y2), [0, 255, 0], 1)
    
    for (x, y, h) in center_line:
        (x1, y1, x2, y2) = (x, y - h/2, x, y + h/2)
        x1 = int(x1)
        y1 = int(y1)
        x2 = int(x2)
        y2 = int(y2)
        show = cv2.line(show, (x1, y1), (x2, y2), (0, 0, 255), 1)
    imshow(show)
    

    处理结果如下:
    img6

    之后进行排序和聚类,使得其顺序为从上到下,并且分为十大簇,每一簇代表一大列

    记忆化搜索择优

    观察上一步得到的结果,容易看出绿色的线有重合,而且非常的杂乱还有空缺,此时需要使用记忆化搜索进行择优,具体的代码比较复杂,如下:

    #用于储存最终结果
    ans = [[] for i in range(len(break_dot) - 1)]
    
    #动态规划数组
    dp = []
    
    #缓存变量
    buf = []
    
    #用于计算路径path的变量
    father = {}
    path = []
    
    #寻找近邻函数
    err = 2.5
    def findnei(idx, y, multi):
        
        y1_upper = y + 15.5*multi + err
        y1_lower = y + 15.5*multi - err
        y2_upper = y - 15.5*multi + err
        y2_lower = y - 15.5*multi - err
    
        upper = []
        lower = []
    
        for i in range(len(buf)):
            y = buf[i][1]
            if y > y1_lower and y < y1_upper:
                upper.append(i)
            elif y > y2_lower and y < y2_upper:
                lower.append(i)
        
        return (upper, lower)
    
    #深度优先搜索
    def dfs(idx, i):
    
        #查表
        if dp[i] >= 0:
            return dp[i]
    
        #取出临近点
        y1 = buf[i][1]
        for j in range(5):
            nei = findnei(idx, y1, j+1)[1]
            if len(nei) != 0:
                break
    
        #如果没有临近点
        if len(nei) == 0:
            dp[i] = 1
            father[i] = None
            return dp[i]
    
        #找到最优临近点的编号和DP值
        MAX = -1e6
        MAX_IDX = -1
    
        #状态转移
        for j in range(len(nei)):
            if dfs(idx, nei[j]) > MAX:
                MAX = dfs(idx, nei[j]) + 1
                MAX_IDX = nei[j]
    
        #记录father
        dp[i] = MAX
        father[i] = MAX_IDX
        return dp[i]
    
    # memdfs
    for i in range(10):
        buf = cleaned[break_dot[i]:break_dot[i+1]]
    
        #初始化
        dp = [-1 for i in range(len(buf))]
        
        #记忆化搜索
        MAX = -1e6
        for j in range(len(buf)-1, -1, -1):
            if dfs(i, j) > MAX:
                MAX = dfs(i, j)
    
                #计算path路径
                x = father[j]
                path = []
                path.append(j)
                while x != None:
                    path.append(x)
                    x = father[x]
        
        #计算ans
        path = sorted(path)
        for j in path:
            ans[i].append(buf[j])
        
    #搜索结果可视化
    clr = [(255, 0, 0), (0, 255, 0), (0, 0, 255)]
    show = np.copy(org)
    for i in range(len(break_dot) - 1):
        for (x1, y1, x2, y2) in ans[i]:
            show = cv2.line(show, (x1, y1), (x2, y2), clr[i % 3], 2)
    imshow(show)
    

    处理的结果如下:
    img7

    插值和对齐

    记忆化搜索出来的结果没有重叠的部分,而且都是匹配比较优良的组合,但是其没有左右对齐,比较杂乱,而且中间有空隙,
    需要使用插值算法填补其中的空隙,使用对齐算法将每一簇的横线对齐

    具体的代码如下:

    #对齐
    ex = 30
    for i in range(len(ans)):
        (x0, y0, _) = center_line[i]
        for j in range(len(ans[i])):
            (x1, y1, x2, y2) = ans[i][j]
            x1 = x0 - ex
            x2 = x0 + ex
            ans[i][j] = (x1, y1, x2, y2)
    
    #对齐结果显示
    show = np.copy(org)
    for i in range(len(break_dot) - 1):
        for (x1, y1, x2, y2) in ans[i]:
            show = cv2.line(show, (x1, y1), (x2, y2), (0, 0, 255), 2)
    imshow(show)
    
    #插值
    err = 2.5
    def gap(y1, y2):
        delta = abs(y1 - y2)
        mul = (delta + err) / 15.5
        return int(mul) 
    
    for i in range(len(ans)):
    
        buf = []
    
        for j in range(len(ans[i]) - 1):
            (x1, y1, x2, y2) = ans[i][j]
            (_, y, _, _) = ans[i][j+1]
            
            cnt = gap(y, y1)
            for k in range(cnt):
                newy = int(y1 + 15.5 * k)
                buf.append((x1, newy, x2, newy))
        buf.append(ans[i][len(ans[i]) - 1])
    
        ans[i] = buf
    
    #绘制
    show = np.copy(org)
    for i in range(len(break_dot) - 1):
        for (x1, y1, x2, y2) in ans[i]:
            show = cv2.line(show, (x1, y1), (x2, y2), (0, 0, 255), 2)
    imshow(show)
    

    处理结果如下:
    img8

    最后进行图像的切分,切分结果如下:
    img9

    展开全文
  • 本文设计了一种智能停车场的车位信息检测及管理系统,系统通过在停车场车位上安装地磁感应装置,实时采集车位的状态信息,然后借助GPRS无线网络传输至信息管理平台,信息管理平台进行后续数据的处理及信息显示,最后...
  • 停车场车位识别,opencv图像预处理,训练网络模型 项目理论和源码来自唐宇迪opencv项目实战 本项目的目的是设计一个停车场车位识别的系统,能够判断出当前停车场中哪些车位是空的。 任务共包含部分: 1.制作数据集,...
  • (1)显示停车场现有车辆数和已停放过车辆数,总共16个车位,指示灯指示具体的车位占用情况; (2)可以手动设置总车位数以及剩余车位数; (3)车位满后将报警提示。
  • 我会在近段时间内把之前的项目上遇到的一些我觉得需要记录的需求、问题给写下来,来弥补之前没有写博客的习惯。...需求:当管理员登录智慧停车项目后台时,首页需要展示当前地区的停车场信息,以及每个停车场的停...
  • 在线体验到室内地图的功能后,手机对室内地图加载一个字,要显示“快”,目前微信和电脑都可以打开室内地图的要求是3秒内打开,能有定位导航...目前就根据商场停车项目需求,先如何找到一个商场停车场车位的事情说起...
  • 以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。 本论文介绍了利用单片机控制的一种停车场管理系统。它能在任意时间...
  • 以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。 本论文介绍了利用单片机控制的一种停车场管理系统。它能在任意时间...
  • 我的微信公众号名称:AI研究订阅号 微信公众号ID:MultiAgent1024 公众号介绍:主要研究强化学习、...哪个停车位被占用了,哪个停车位没有被占用。   读取图像:   拿到图像之后,我们需要将其预处理,低于...
  • 使用C51单片机和12864显示屏,总控制器和区域控制器会实时的统计停车场总的停车位和每一个区域的停车位空闲状,然后通过显示显示出来,所以车主在驶入停车场的整个过程中都可以得到指引,顺利的找到一条最方便快接...
  • 题目要求 设计一个同步时序计数器来模拟一个停车场空闲车位数目的计数显示装置。 1、系统框图 通过模块我们可以知道,IN、OUT这l两个是input端口,且均为两个异步的时钟信号,电平触发,输出的NUM为output端口,模拟...
  • 停车位matlab代码停车场 估计停车场的可用空间 估计可用空间 如果停车场有空间,此代码返回消息。 当那里有任何空间时,它会返回不同的消息 本项目由MATLAB编写 ...1111.3gp:显示停车场的视频有很多可用空间。
  • 它可以实现控制的开启、显示停车场现有车辆数和已停放过车辆数、人工的设置总车位数以及剩余车位数的数值显示等功能。并且拥有16个模拟的停车位,用来显示车辆停放的具体位置。 系统的特点: 由于本系统采用电子元件...
  • 2 定位每一个车位并编号 1 准备工作 1.1 glob模块 glob模块 是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,类似于Windows下的文件搜索,支持通配符操作,*,?,[]这三个通配符,*...
  • EX_NET团队产品介绍-----停车场车位引导系统概述 本系列文章由ex_net(张建波)编写,转载请注明出处。 http://blog.csdn.net/ex_net/article/details/7616345 作者:张建波 邮箱: 281451020@qq.com 电话:...
  • 城市里合理规划停车场机动车停放会更加有序不知道小伙伴们有没有发现:在眉山有个停车场明明显示着还剩余20个车位可是车却停不进去这是为什么呢?近日,不少网友给小编反映,主城区远景楼下,明明停车场显示显示有...
  • 在一段停车场,车辆来往的视频中实时检测出: 有多少个停车位被占据了,有多少是空着的; 哪个被占,哪个是空的。 视频中的一些截图 二、思路 视频是由一帧一帧的图像构成的,对视频的处理就是对图像的处理。 第...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,005
精华内容 802
关键字:

停车场车位显示