opencv实践项目-停车位检测

news/2023/9/22 15:36:18 标签: opencv, 计算机视觉, 人工智能

目录

  • 1. 步骤
    • 1.1 selector选择器
    • 1.2 detector探测器
  • 2. 代码
  • 3. 效果图

1. 步骤

1.1 selector选择器

  • 我们可以选择摄网络摄像头提供的第一帧,在该图像上选择停车位。为此,保存并使用该图像选择停车位。
  • 使用selectROIs函数标记停车位。ROI被定义为感兴趣的区域,代表图像的一部分,我们将在其上应用不同的函数以及滤波器来获取结果
/*
@param windowName 选择窗口显示的名称
@param img 输入的image
@param boundingBoxes 选择的框
@param showCrosshair 如果为true显示选取内部的中心线,否则不显示
@param fromCenter 如果为真,选择中心将匹配初始鼠标位置。在相反的情况下,选择矩形的一个角将对应于鼠标的初始位置,是一个非常重要的参数,因为如果将其设置为True,则正确的选择会困难得多
*/
void selectROIs(const String& windowName, InputArray img,
                             CV_OUT std::vector<Rect>& boundingBoxes, bool showCrosshair = true, bool fromCenter = false);

选择所有停车位之后,可以将它们写入.csv文件里,就不用每次都要去手动选择车位框了。

1.2 detector探测器

现在我们已经选择了停车位,是时候进行一些图像处理了。解决这个问题的方法如
下:

  1. 从.csv文件获取坐标。
  2. 从中构建新图像。
  3. 应用OpenCV中可用的Canny函数。
  4. 计算新图像内的白色像素。
  5. 建立一个点内的像素范围将被占用。
  6. 在实时供稿上绘制一个红色或绿色矩形。

2. 代码


void drawRectangle(cv::Mat& img, cv::Rect rect, int lowThreshold, int highThreshold, int minPix, int maxPix, int &spots_loc)
{
	cv::Mat sub_img = img(rect);
	cv::Mat edges;
	cv::Canny(sub_img, edges, lowThreshold, highThreshold);
	int pix = cv::countNonZero(edges);

	if (pix >= minPix && pix <= maxPix)
	{
		cv::rectangle(img, rect, cv::Scalar(0, 255, 0), 3);
		spots_loc++;
	}
	else
	{
		cv::rectangle(img, rect, cv::Scalar(0, 0, 255), 3);
	}
}

int main()
{
	char* path = "E:\\code\\Yolov5_Tensorrt_Win10-master\\pictures\\1.png";
	Mat src = imread(path);
	if (src.empty()) {
		return -1;
	}
	std::vector<cv::Rect> result_pots;
	cv::selectROIs("roi", src, result_pots, false, false);

	cv::namedWindow("parameters");
	int val1 = 186, val2 = 122, val3 = 100, val4 = 800;
	cv::createTrackbar("Threshold1", "parameters", &val1, 700);
	cv::createTrackbar("Threshold2", "parameters", &val2, 700);
	cv::createTrackbar("Min pixels", "parameters", &val3, 1500);
	cv::createTrackbar("Max pixels", "parameters", &val4, 1500);

	while (true)
	{
		int spots_loc = 0;
		int min = cv::getTrackbarPos("Min pixels", "parameters");
		int max = cv::getTrackbarPos("Max pixels", "parameters");
		int lowThreshold = cv::getTrackbarPos("Threshold1", "parameters");
		int highThreshold = cv::getTrackbarPos("Threshold2", "parameters");

		for (const auto& rect : result_pots)
		{
			drawRectangle(src, rect, lowThreshold, highThreshold, min, max, spots_loc);
		}

		std::string text = cv::format("Available spots:%d", spots_loc);
		cv::putText(src, text, { 20, 30 }, cv::FONT_HERSHEY_PLAIN, 1, cv::Scalar(0,255,0), 2);
		cv::imshow("src", src);

		if ((cv::waitKey(1) & 0xFF) == 'q')
			break;
	}

	return 0;
}

3. 效果图

在这里插入图片描述
注意:

  • 为实时调整参数,构建一些轨迹栏,通过调整参数可以正确识别空闲停车位
  • 显示中的Available spots:数字有叠加,因为没有视频,是靠一张图片循环的
  • 这里的select 框并没有存文件,每次需要手动选择

http://www.inspinia.net/a/542443.html

相关文章

自主可控!搭载龙芯二号,飞凌嵌入式FET-2K0500-C核心板发布

作为国内领先的信息技术核心产品研发企业&#xff0c;龙芯中科致力于打造自主开放的软硬件生态和信息产业体系&#xff0c;为国家战略需求提供自主、安全、可靠的处理器。现在&#xff0c;飞凌嵌入式与龙芯中科强强联手&#xff0c;共同推出FET-2K0500-C核心板&#xff01; 飞…

基于SSM+Vue的房屋租赁网站-求租合同设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

AI创作与大语言模型:2023亚马逊云科技中国峰会引领企业应用新潮流

川川出品&#xff0c;必属精品。 文章目录 CodeWhispere免费的代码生成器安装教程使用自动编码 2023亚马逊云科技中国峰会最后总结 CodeWhispere免费的代码生成器 这里我介绍亚马逊云科技的一个产品&#xff0c;那就是Amazon codewhisperer。大家肯定对AI各种产品的火爆已经有…

高通KMD框架详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、核心模块解析三、模块初始化四、处理UMD CSL请求 一、概览 利用了V4L2可扩展这一特性&#xff0c;高通在相机驱动部分实现了自有的一套KMD…

php开发中大数据量优化的问题总结(1):smarty循环优化、API掉包丢失数据排查、负载平衡配置

php开发中大数据量优化的问题总结 一、smarty模版引擎遍历优化1.项目需求2.解决方案 二、对接第三方API掉包丢失数据1.丢包和掉包2.解决和排查3.配置负载均衡命令行宝塔配置 一、smarty模版引擎遍历优化 模版引擎smarty中不规则遍历循环的解决方案(遍历数组、第一个元素单独处…

如何使用ArcGIS制作三维地形图

ArcGIS作为专业的GIS软件&#xff0c;不仅可以制作二维地图&#xff0c;制作三维地图也是不在话下&#xff0c;通常我们使用ArcScene来制作三维地图&#xff0c;这里为大家介绍一下制作三维地图的方法&#xff0c;希望能对你有所帮助。 预处理数据 将准备好的矩形面、矩形线和…

国产触控笔哪个牌子好?第三方电容笔推荐

对于那些把iPad当做学习工具的人来说&#xff0c;这已经成为了他们生活中不可缺少的一部分。但没有人买得起苹果原装电容笔&#xff0c;因为苹果电容笔的售价太贵了。因此&#xff0c;最好还是用一支普通的电容笔。我是个一个苹果粉&#xff0c;同时也是个数字发烧友&#xff0…

2023年深圳某互联网公司前端开发初级岗笔试真题(含解析和源码)

&#x1f4da;关于该专栏: 该专栏的发布内容是前端面试中笔试部分真题、答卷类、机试等等的题目&#xff0c;题目类型包括逻辑题、算法题、选择题、问答题等等&#xff0c;除了内容的分享&#xff0c;还有解析和答案。真实来自某些互联网公司&#xff0c;坐标广东广州、深圳。 …

400万总奖金!打一场大厂算法赛事

Datawhale赛事 主办&#xff1a;科大讯飞&#xff0c;伙伴&#xff1a;Datawhale 5月6日&#xff0c;伴随科大讯飞星火认知大模型的发布&#xff0c;2023年度 iFLYTEK A.I. 开发者大赛也正式开启。本届大赛的总奖金池超400万元&#xff0c;除此外还将进一步开放海量数据与核心…

你知道支付宝转账怎么在自己的手机上不留痕迹吗

支付宝和微信支付是现代社会中非常普遍的移动支付方式&#xff0c;可以方便快捷地完成各种线上和线下交易。然而&#xff0c;在一些情况下&#xff0c;用户可能希望隐藏或删除某些转账的痕迹&#xff0c;以保护个人隐私或避免不必要的麻烦。对于支付宝而言&#xff0c;实际上有…

spring事务隔离

在数据库中读取数据时&#xff0c;可能会遇到以下三个常见的问题&#xff1a;脏读&#xff08;Dirty Read&#xff09;、不可重复读&#xff08;Non-repeatable Read&#xff09;和幻读&#xff08;Phantom Read&#xff09;。 这些问题主要涉及并发事务的隔离性和一致性。 脏…

GPS跟踪系统Traccar

什么是 Traccar &#xff1f; Traccar是一个开源的 GPS 跟踪系统。支持 200多种GPS 协议和 2000 多种型号的 GPS 跟踪设备。当然也包括像 iOS/Android 这样的手机设备&#xff0c;手机设备只需要安装Traccar的客户端即可使用。 前文介绍的 Hauk 只支持 Android 客户端&#xff…

VPS 和GPS 、SLAM 之间的爱恨情仇

注&#xff1a;该文章首发3D视觉工坊&#xff0c;链接如下3D视觉工坊 VPS 、GPS 、SLAM 的区别与联系 首先简单的阐述一下三者的定义&#xff1a; VPS全称为Visual Positioning System&#xff0c;即视觉定位系统。手机端(移动时代&#xff09;的VPS首次出现时间节点为2019年&…

一文带你了解MySQL之锁

目录 一、解决并发事务带来问题的两种基本方式1.1 一致性读&#xff08;Consistent Reads&#xff09;1.2 锁定读&#xff08;Locking Reads&#xff09;1.2.1 共享锁和独占锁1.2.2 锁定读的语句 1.3 写操作 二、多粒度锁三、MySQL中的行锁和表锁3.1 其他存储引擎中的锁3.2 Inn…

ISO21434 生产阶段网络安全(九)

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 五、输出 一、概述 生产包括项目或部件的制造和组装&#xff0c;包括车辆水平。制定生产控制计划是为了确保将开发后的网络安全要求应用于项目或组件&#xff0c;并确保在生产过程中不…

容器(第三篇)docker-cgroup资源限制

Docker 通过 Cgroup 来控制容器使用的资源配额&#xff0c;包括 CPU、内存、磁盘三大方面&#xff0c; 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写&#xff0c;是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、内存、…

【深入理解Linux内核锁】二、中断屏蔽

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

node.js+vue药品药店进销存管理系统jb526

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 重点研究的&#xff0c;关键的问题&#xff1a; &#xff08;1&#xff09;业务流程&#xff1b; &#xff08;2&#xff09;前台…

【Python】Python进阶系列教程-- Python3 MySQL - mysql-connector 驱动(三)

文章目录 前言创建数据库连接创建数据库创建数据表主键设置 插入数据批量插入查询数据where 条件语句排序Limit删除记录更新表数据删除表 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 CGI编程…

可商用!全球首个基于Falcon架构的中文大语言模型OpenBuddy开源了!

在人工智能领域&#xff0c;大语言模型正以前所未有的速度发展&#xff0c;它们已经成为众多企业、研究机构和个人开发者的新宠。今天&#xff0c;OpenBuddy&#xff0c;这个由业界的开源爱好者和学术研究者组成的研究团队&#xff0c;正式宣布研发出全球首个基于 Falcon 架构、…