opencv实践项目-停车位检测

news2024/11/29 9:51:30

目录

  • 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.coloradmin.cn/o/626341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式限流算法及实现介绍

分布式系统架构下面对突增的高并发访问请求&#xff0c;如何实现限流以保护系统的可用性是需要关注的一个问题。分布式限流实现机制上有很多中&#xff0c;包括基于网关实现、基于中间件如Redis实现等&#xff0c;本文简要介绍限流的常用算法以及实现方案。 1、分布式限流概述 …

Windows操作系统渗透测试

Windows操作系统渗透测试 任务环境说明&#xff1a;服务器场景名&#xff1a;Server02服务器场景操作系统&#xff1a;未知&#xff08;关闭链接&#xff09; 1.通过本地PC中渗透测试平台Kali对服务器场景进行系统服务及版本扫描渗透测试&#xff0c;并将该操作显示结果中808…

可视化报表系统推荐

在当今信息时代&#xff0c;数据的处理和分析已经成为了企业管理中不可或缺的一部分。而报表则是这个过程中最常见的工具之一。手工写报表虽然简单易懂&#xff0c;但是随着数据量的增加&#xff0c;这种方式逐渐暴露出许多痛点。比如说&#xff1a; 1.时间耗费长&#xff1a;…

Linux之进程间通信——管道

文章目录 前言一、进程间通信1.概念2.目的3.进程间通信分类 二、管道1.管道介绍2.管道分类1.匿名管道pipi创建管道文件&#xff0c;打开读写端fork子进程关闭父进程的读取端&#xff0c;关闭子进程的写入端读写特征管道特征 2.命名管道mkfifo创建管道文件删除管道文件通信 三、…

【openframework】实时路径规划(RTRRTstar算法)

程序框架 视频演示 实时RRT-star算法介绍 实时RRT-star算法是一种基于采样的运动规划算法&#xff0c;它可以在有限的时间内找到一条渐进最优的路径。实时RRT-star算法是在RRT-star算法的基础上进行了改进&#xff0c;主要有两个方面&#xff1a; - 实时更新起始点。实时RRT-st…

那些漏洞挖掘高手都是怎么挖漏洞的?

前言 说到安全就不能不说漏洞&#xff0c;而说到漏洞就不可避免地会说到三座大山&#xff1a; 漏洞分析 漏洞利用 漏洞挖掘 从个人的感觉上来看&#xff0c;这三者尽管通常水乳交融、相互依赖&#xff0c;但难度是不尽相同的。本文就这三者分别谈谈自己的经验和想法。 漏洞分析…

Mac图片批处理工具

PhotoMill X是一款强大的图像处理软件&#xff0c;它可以帮助用户快速地对照片进行编辑、调整和转换。它支持在单个或批量模式下处理大量的图像文件&#xff0c;并具有直观的用户界面和易于使用的工具。 PhotoMill X具有广泛的编辑功能&#xff0c;包括裁剪、缩放、旋转、调整明…

记录基于Vue.js的Tree组件_Liquor Tree

酒树 (Liquor Tree) A Vue tree component that allows you to present hierarchically organized data in a nice and logical manner. Vue 树组件&#xff0c;可让您以美观和逻辑的方式呈现层次结构的数据。 supports mobile, and has a variety of response events. Flex…

软考A计划-电子商务设计师-模拟试题卷三

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

springboot+websocket客服聊天

续&#xff1a;spring boot 完整后端接口案例_cc&的博客-CSDN博客 后台代码 1.在pom.xml中添加spring-boot-starter-websocket <!--WebSocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

浅谈数明深力科隔离驱动器SLMi8235BD 车载充电器(OBC)方案

数明深力科SLMi823x系列SLMi8235BD隔离驱动技术优势&#xff1a;具有高性能、高性价比、高可靠性的产品特性&#xff0c;应用覆盖UPS、充电桩、服务器电源、通信电源、新能源汽车动力总成系统的车载 OBC 领域。通过CQC认证的。 车载充电器&#xff08;OBC&#xff09;是电动汽…

在线电子书创建:MkDocs + Github + ReadTheDocs

MkDocs是一个静态站点生成器&#xff0c;可用于构建项目文档。文档文件使用Markdown语法编写&#xff0c;本文记录如何使用MkDocs生成项目文档&#xff0c;并部署到Read the Docs上。 目录 安装mkdocs搭建文档项目创建项目启动项目编写文档Markdown语法站内链接图片 文档结构 配…

聚观早报 | 苹果收购AR头显初创公司Mira;抖音将尝试自营电商

今日要闻&#xff1a;苹果收购AR头显初创公司Mira&#xff1b;抖音将尝试自营电商&#xff1b;特斯拉股价实现九连涨&#xff1b;《黑镜》主创曾试用ChatGPT写剧本&#xff1b;携程集团发布2023Q1财报 苹果收购AR头显初创公司Mira 6 月 7 日消息&#xff0c;据 The Verge 报道…

2023免费电脑录视频软件Camtasia

Camtasia 2023是专业又好用的录屏软件&#xff0c;既可以用来录视频、ppt、直播课程等&#xff0c;也能够处理视频&#xff0c;添加各种效果&#xff0c;制作出更加满意的视频作品。Camtasia凭借愈发强大的功能收获了一大批忠实用户和如潮好评&#xff0c;已成为屏幕录制的必备…

6.16 @ 广州丨相约泛娱乐出海论坛,探寻市场突围的核心要义

1979 年&#xff0c;“出国办企业”第一次被有关部门提出&#xff0c;开启了中国企业对外投资的积极探索与尝试。经过 40 多年的耕耘&#xff0c;不少出海品牌已经站稳了脚跟&#xff0c;品牌影响力与日俱增&#xff0c;甚至在部分核心细分赛道上&#xff0c;中国企业凸显出了明…

TiDB 7.1 LTS 发版:为关键业务提供业务稳定性和多租户场景支持

近日&#xff0c;企业级开源分布式数据库厂商 PingCAP 正式发布 TiDB 7.1 版本&#xff0c;这也是 2023 年度发布的首个 LTS&#xff08;Long Term Support&#xff09; 版本&#xff0c;汇集了来自 20 个真实场景带来的功能增强&#xff0c;累计优化和修复 140 功能&#xff0…

easyui5

1.1准备工作. 今天我们的主要任务是完成分页功能&#xff1b; 导入数据表 t_book&#xff0c;数据文件在课件&#xff1b; 介绍拼音字段&#xff0c;拼音工具类&#xff0c;拼音jar包&#xff1b; 模糊查询还要实现拼音模糊查询&#xff0c;如&#xff1a;百度输入拼音也可以…

飞凌嵌入式AM62x系列核心板配置新增,单核/双核/四核随心选

新时代&#xff0c;工业、电力、交通、医疗等众多行业纷纷从信息化向着智能化转型&#xff0c;这就对主控的综合性能提出了全新的要求。在这样的背景下 TI AM62x Sitara™处理器应运而生&#xff0c;为AIoT时代带来了新的突破可能。作为TI官方合作伙伴&#xff0c;飞凌嵌入式于…

RabbitMQ - 发布确认高级

RabbitMQ - 发布确认高级 发布确认 springboot 版本回退消息备份交换机 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始…

Steemit 会颠覆 Quora/知乎 甚至 Facebook 吗?

Steemit是基于区块链技术的社交媒体平台&#xff0c;其独特的激励机制吸引了众多用户。然而&#xff0c;是否能够真正颠覆Quora、知乎甚至Facebook这些已经成为社交巨头的平台&#xff0c;仍然存在着许多未知因素。本文将探讨Steemit的优势和挑战&#xff0c;以及其在社交领域中…