红路灯识别

1.截图图像中的目标对象

1.1 查找边界矩形

1.1.1直边界矩形

一个直矩形(就是没有旋转的矩形)。它不会考虑对象是否旋转。所以边界矩形的面积不是最小的。

cv2.boundingRect(array)
输入:点集
输出:(x,y)为矩形左上角的坐标,(w,h)是矩形的宽和高。

1.1.2旋转的边界矩形

这个边界矩形是面积最小的,因为它考虑了对象的旋转

cv2.minAreaRect(points)  # 得到最小外接矩形的(中心(x,y), (宽,高), 旋转角度)
输入:点集
输出:返回的是一个Box2D 结构,其中包含矩形左上角角点的坐标(x,y),矩形的宽和高(w,h),以及旋转角度。

 注意:

  • 旋转角度θ是水平轴(x轴)逆时针旋转,直到碰到矩形的第一条边停住,此时该边与水平轴的夹角。并且这个边的边长是width,另一条边边长是height。也就是说,在这里,width与height不是按照长短来定义的。
  • 在opencv中,坐标系原点在左上角,相对于x轴,逆时针旋转角度为负,顺时针旋转角度为正。所以,θ∈(-90度,0]。

1.1.3给出矩形的4 个角点

cv2.boxPoints(box, points=None)
输入:一个Box2D 结构
输出:x1,y1,x2,y2

1.2绘制矩形

1.2.1绘制直边界矩形

1.2.2绘制旋转的边界矩形

1.3 图像旋转

1.3.1构造旋转矩阵

# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)

1.3.2执行图像几何变换

# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))

1.4图像截取

坐标值,感兴趣区域都为整形变量

getRectSubPix(image, patchSize, center, patch=None, patchType=None)
输入:InputArray image:输入图像

      Size patchSize:获取感兴趣区域矩形的大小

      Point2f center:感兴趣区域矩形在原图像中的位置(即感兴趣区域矩形的中心点坐标)
输出:截取后的图像

1.5 模板匹配

2 获取指定颜色的物体

2.1色域转变为HSV

cv2.cvtColor(img2,cv2.COLOR_BGR2HSV)

2.2 获取相关颜色的HSV值

通过鼠标触发获取相关位置的HSV值

img=cv2.imread("D:\\video_data\\ocr7.PNG")
img_hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
def mouse_click(event, x, y, flags, para):
    if event == cv2.EVENT_LBUTTONDOWN:  # 左边鼠标点击
        print("HSV:", img_hsv[y, x])
if __name__ == '__main__':
    cv2.namedWindow("img")
    cv2.setMouseCallback("img", mouse_click)
    while True:
        cv2.imshow('img', img)
        if cv2.waitKey() == ord('q'):
            break
    cv2.destroyAllWindows()

2.3 进行二值化图像处理

cv2.inRange(src,lowerb, upperb)
输入:src :HSV图像,
       lowerb:hsv值域下限, 
        upperb:hsv值域上限
输出:二值化后的图像

3.轮廓识别

3.1 轮廓检测

cv2.findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
三个参数,第一个是输入图像,第二个是轮廓检索模式,
第三个是轮廓近似方法{cv2.CHAIN_APPROX_NONE:所有的边界点都会被存储,
                    cv2.CHAIN_APPROX_SIMPLE:将轮廓上的冗余点都去掉,压缩轮廓}
返回值有两个,第一个是轮廓,第二个是(轮廓的)层析结构

3.2 轮廓绘制

drawContours(image, contours, contourIdx, color)
它的第一个参数是原始图像,第二个参数是轮廓,一个Python 列表。第三个参数是轮廓的索引(在绘制独立轮廓是很有用,当设置为-1 时绘制所有轮廓)。接下来的参数是轮廓的颜色和厚度

3.3 轮廓特征

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/104507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么防止文件夹被删除、复制?

当文件夹中存放重要数据时,我们需要严格保护文件夹的安全,避免文件夹被复制、删除。那么,该怎么防止文件夹被删除、复制呢?下面我们就一起来了解一下。 ​文件夹隐藏 当文件夹被隐藏时,其他人无法发现文件夹&#xff…

Java 中是如何获取 IP 属地的

随着互联网的普及,人们在使用计算机或移动设备上网时,都会被分配一个IP地址,以便进行网络通信。而当我们访问某个网站或使用某些网络服务时,我们通常会发现不同地区的用户会显示不同的IP属地。那么,在Java中是如何获取…

Lua-http库写一个爬虫程序怎么样 ?

目录 一、了解Lua-http库 二、爬虫程序的需求分析 三、爬虫程序的实现步骤 四、代码示例 总结 随着互联网的快速发展,网络爬虫已经成为了获取信息的重要手段之一。Lua-http库作为一个强大的HTTP库,可以轻松地帮助我们实现爬虫程序。本文将介绍如何使…

vector详解

迭代器 vector维护的是一个连续线性空间。普通指针可以满足条件作为vector的迭代器。 template <typename T, typename Allocalloc> class vector { public: using value_type T; using iterator value_type*; }; vector::iterator //int* vector::iterator //char* …

利用Linux socat快速搭建TCP服务器

某些场合&#xff0c;需要在Linux上快速搭建一个TCP的服务器&#xff0c;接收客户端的连接&#xff0c;返回一些数据。 一般用于测试或者负载不大&#xff0c;安全性要求不高的场合&#xff0c;达到快速搭建的目的。 本文以客户端通过服务器的3334端口&#xff0c;获取服务器…

使用 Rust 和 cURL 库下载程序

以下是一个使用 Rust 和 cURL 库的下载器程序&#xff0c;用于下载 图像。此程序使用了 https://www.duoip.cn/get_proxy 的代码。 extern crate curl; ​ use std::io::{self, Read}; use std::error::Error; ​ fn main() {let url "https://www.baidu.com";let …

TCP / UDP 概念 + 实验(计网自顶向下)

Github源码 moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 (github.com) 暂定打算分2步走&#xff0c;前置是中科大对应计网黑书的视频 第1步完成14个Wire…

思维导图软件 ConceptDraw MINDMAP mac中文特色介绍

ConceptDraw MINDMAP mac是一款思维导图绘制软件&#xff0c;它可以帮助用户快速创建各种类型的思维导图&#xff0c;如组织结构图、流程图、概念图和UML图等。该软件具有直观的界面和简单易用的操作方式&#xff0c;使得用户能够轻松地创建复杂的思维导图。此外&#xff0c;它…

Qt跨平台(统信UOS)各种坑解决办法

记录Qt跨平台的坑&#xff0c;方便日后翻阅。 一、环境安装 本人用的是qt 5.14.2.直接在官网下载即可。地址&#xff1a;Index of /archive/qt/5.14/5.14.2 下载linux版本。 下载之后 添加可执行权限。 chmod 777 qt-opensource-linux-x64-5.14.2.run 然后执行。 出现坑1…

R语言生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

【C语言】指针那些事之数组传参和指针传参的区别

C语言系列 文章目录 目录 C语言系列 文章目录 前言 一&#xff0c;数组传参和指针传参 1.1一维数组传参 1.2二维数组传参 1.3一级指针传参 1.4当一个函数的参数部分为一级指针的时候&#xff0c;函数可以接收什么参数 1.5二级指针传参 1.6当函数的参数为二级指针的时…

xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中

如果你看官方文档&#xff0c;在研究透&#xff0c;至少也得几天时间&#xff0c;如果你直接看我的文档&#xff0c;快速用到项目中&#xff0c;也就10分钟就搞好了。 xxl-job功能确实很强大&#xff0c;而且使用的人比较多&#xff0c;既然在使用xxl-job&#xff0c;那肯定是…

pytorch 入门 (四)案例二:人脸表情识别-VGG16实现

实战教案二&#xff1a;人脸表情识别-VGG16实现 本文为&#x1f517;小白入门Pytorch内部限免文章 参考本文所写记录性文章&#xff0c;请在文章开头注明以下内容&#xff0c;复制粘贴即可 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参…

ruoyi-nbcio版本从RuoYi-Flowable-Plus迁移过程记录

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 从KonBAI / RuoYi-Flowable-Plus 项目移植过来&#xff0c;开始用yarn install之后yarn run dev 还是有问…

腾讯云价格计算器有用过的吗?好用!

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价&#xff0c;包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用&#xff0c;腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明&#xff1a; 腾讯云服务器价格计算器 打开腾…

Java八股文 ---Java并发篇

线程安全 线程安全就是多个线程去执行某类&#xff0c;这个类始终能表现出正确的行为&#xff0c;那么这个类就是线程安全的 我们判断是否要处理线程安全问题&#xff0c;就看有没有多个线程同时访问一个共享变量 能不能保证操作的原子性&#xff0c;考虑atomic包下的类够不够我…

Kubernetes技术与架构-网络 3

Kubernetes集群支持为Pod或者Service申请IPV4或者IPV6的地址空间。 kube-apiserver --service-cluster-ip-range<IPv4 CIDR>,<IPv6 CIDR> kube-controller-manager --cluster-cidr<IPv4 CIDR>,<IPv6 CIDR> --service-cluster-ip-range<IPv4 CI…

架构风格区别-架构案例(五十九)

管道-过滤器和仓库的区别&#xff1f; 独立的数据仓库&#xff0c;处理流独立&#xff0c;处理数据用连接仓库工具数据与处理在一起&#xff0c;改动的话需要重启系统需要仓库工具与仓库连接&#xff0c;数据与处理分离&#xff0c;性能差可以支持并发连接访问仓库&#xff0c…

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;我们一般都知道Mysql的存储引擎有两种&#xff0c;MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…

基于单片机设计的防煤气泄漏装置

一、前言 煤气泄漏是一个严重的安全隐患&#xff0c;可能导致火灾、爆炸以及对人体健康的威胁。为了提高家庭和工业环境中煤气泄漏的检测和预防能力&#xff0c;设计了一种基于单片机的防煤气泄漏装置。 单片机选择STC89C52作为主控芯片。为了检测煤气泄漏&#xff0c;采用了…