【OpenCV概念】 11— 对象检测

一、说明

        这都是关于物体识别的。物体识别是指通过计算机视觉技术,自动识别图像或视频中的物体及其属性和特征,是人工智能领域的一个分支。物体识别可应用于多个领域,包括工业自动化、智能家居、医疗、安防等。请随时阅读这篇文章:类似哈尔的功能(维基百科))

二、项目完成过程

        我们在这里所做的只是检测俄罗斯车牌和图像,然后使用haarcascade方法模糊它们。

2.1 步骤1: 导入库

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2.2 步骤:导入要使用的图像

img = cv2.imread('DATA/car_plate_0.jpg')

2.3 步骤3:显示图像

        接下来,我们希望您创建一个函数,以更大的比例显示图像并进行颜色校正。

def display(img):fig = plt.figure(figsize=(10,8))ax = fig.add_subplot(111)new_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)ax.imshow(new_img)

        测试一下:

display(img)

2.4 步骤4: 加载级联俄罗斯车牌号 XML 文件。

        对于此步骤,您必须下载并粘贴到/DATA文件夹中的目录haarcascades。地址如下:opencv/data/haarcascades at master · opencv/opencv · GitHub

plate_cascade = cv2.CascadeClassifier('DATA/haarcascades/haarcascade_russian_plate_number.xml')

2.5 步骤5: 检测板的功能

        接下来,我们要创建一个函数来接收图像并围绕它所获取的内容绘制一个矩形。

def detect_plate(img):plate_img = img.copy()plate_rects = plate_cascade.detectMultiScale(plate_img,  scaleFactor=1.3, minNeighbors=3)for(x,y,w,h) in plate_rects:cv2.rectangle(plate_img, (x,y), (x+w, y+h), (0,0,255),3)return plate_img

        测试一下:

result = detect_plate(img)

        显示它:

display(result)

        04步骤 # 检测板的功能

        所以现在我知道车牌在哪里,我可以把它模糊出来。

        所以我要做的方法是,我实际上要删除这个区域并将其设置为感兴趣的区域(RoI)。

        然后我将模糊该区域,然后将其粘贴回原始图像中。

def detect_n_blur_plate(img):plate_img = img.copy()roi = img.copy()plate_rects = plate_cascade.detectMultiScale(plate_img,      scaleFactor=1.3, minNeighbors=3)for(x,y,w,h) in plate_rects:roi = roi[y:y+h, x:x+w]blured_roi = cv2.medianBlur(roi, 7)plate_img[y:y+h, x:x+w] = blured_roireturn plate_img

        测试一下:

result = detect_n_blur_plate(img)

        显示它:

display(result)

这些是该项目的文件,在每个图像上运行该方法,请查看这篇有关如何操作文件的文章。 :)

from pathlib import Path
path = Path('DATA/')
files = path.iterdir()
for file in files:file_name = file.nameif file_name[:9]=='car_plate' and file_name[-3:] == 'jpg':print(file_name)car_plate_0.jpgcar_plate_1.jpgcar_plate_2.jpgcar_plate_3.jpgcar_plate_4.jpgcar_plate_5.jpgcar_plate_6.jpg

这就是大家!

print("That's it! Thank you once again!\nI hope will be helpful.")
That's it! Thank you once again!
I hope will be helpful.

以下是我们测试的图像:

Note: 
The last image the algorithm was not able to detect.
The reasons may be several: The image may be at an angle difficult to detect, the numbering may not be Russian, the taillights do not give adequate space, who knows...
Try it yourself by manipulating the function parameters.
That is all!
Goodbye

三、小结

        以上识别办法是在Harr模式识别办法,预先做好Harr模板然后调用,至于Harr原理,请看如下网页:Haar-like feature - Wikipedia

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

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

相关文章

【Qt进阶之自定义控件】使用QListWidget实现自定义Item效果

目的 Q:如何在Qt库的基础上,实现自定义控件呢? A:根据官方文档回答,就是继承需实现的控件,然后实现自定义功能。 以下是实现QListWidget控件的自定义item。 先看下最终效果是如何: listItem 主…

【LeetCode】94. 二叉树的中序遍历 [ 左子树 根结点 右子树 ]

题目链接 文章目录 Python3方法一: 递归 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法二: 迭代 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法三: Morris ⟮ O ( n ) 、 O ( 1 ) ⟯ \lgroup O(n)、O(1) \rgroup ⟮O(n)、O(1)⟯ C…

【计算机网络笔记】OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

JVM参数调优

一、案例实践 64G物理内存服务器JVM参数配置建议 如果你的服务器有 64GB 内存,你可以使用以下 JVM 参数来优化 Java 程序的性能: -Xms:设置 Java 堆的初始内存使用量。推荐将该参数设置为总内存的 25% 到 50%。例如,可以设置为…

Debian11系统简单配置

debian11系统简单配置 网卡配置 修改/etc/network/interfaces address 192.168.0.188 gateway 192.168.0.1 netmask 255.255.255.0重启网卡systemctl restart networking.service systemctl restart networking 执行apt 报错 rootdebian:~# apt update 忽略:1 cdrom://[D…

软考 系统架构设计师系列知识点之基于架构的软件开发方法ABSD(7)

接前一篇文章:软考 系统架构设计师系列知识点之基于架构的软件开发方法ABSD(6) 所属章节: 第7章. 系统架构设计基础知识 第5节. 特定领域软件体系结构 相关试题 3. 基于架构的软件设计(Architecture-Based Software …

openGauss学习笔记-106 openGauss 数据库管理-管理用户及权限-管理员

文章目录 openGauss学习笔记-106 openGauss 数据库管理-管理用户及权限-管理员106.1 初始用户106.2 系统管理员106.3 安全管理员106.4 审计管理员106.5 监控管理员106.6 运维管理员106.7 安全策略管理员 openGauss学习笔记-106 openGauss 数据库管理-管理用户及权限-管理员 10…

嵌入式硬件中常见的100种硬件选型方式

1请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌)。 电阻: 美国:AVX、VISHAY 威世 日本:KOA 兴亚、Kyocera 京瓷、muRata 村田、Panasonic 松下、ROHM 罗姆、susumu、TDK 台湾:LIZ 丽智、PHY…

springBoot--web开发--WebMvcAutoConfiguration原理

WebMvcAutoConfiguration原理 自动配置类的生效条件hiddenHttpMethodFilter和formContentFilter的作用WebMvcConfigurer的作用使用演示 自动配置类的生效条件 点击ctarln 搜索类WebMvcAutoConfiguration hiddenHttpMethodFilter和formContentFilter的作用 hiddenHttpMethodF…

基于浣熊优化的BP神经网络(分类应用) - 附代码

基于浣熊优化的BP神经网络(分类应用) - 附代码 文章目录 基于浣熊优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.浣熊优化BP神经网络3.1 BP神经网络参数设置3.2 浣熊算法应用 4.测试结果:5.M…

【单元测试】--基础知识

一、什么是单元测试 单元测试是软件开发中的一种测试方法,用于验证代码中的单个组件(通常是函数、方法或类)是否按预期工作。它旨在隔离和测试代码的最小单元,以确保其功能正确,提高代码质量和可维护性。单元测试通常…

函数式编程:Rust中的闭包与迭代器

闭包 Closure 闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值,例如: fn main() {let x 1;let sum |y| x y;assert_eq!(3, sum(2)); }上面的代码…

【JVM系列】- 类加载子系统与加载过程

类加载子系统与加载过程 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正…

力扣第455题 分发饼干 c++ 贪心 经典题

题目 455. 分发饼干 简单 相关标签 贪心 数组 双指针 排序 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干…

C++ 类

类中成员变量叫做属性,类中成员函数叫做方法。 在C中,通过定义一个类来定义数据结构。一个类定义了一个类型,以及与其关联的一组操作。 对象的概念类似于C语言中的结构体变量,而类类似于结构体。 定义类 定义一个类&#xff0…

Matlab/C++源码实现RGB通道与HSV通道的转换(效果对比Halcon)

HSV通道的含义 HSV通道是指图像处理中的一种颜色模型,它由色调(Hue)、饱和度(Saturation)和明度(Value)三个通道组成。色调表示颜色的种类,饱和度表示颜色的纯度或鲜艳程度&#xf…

学成在线第一天-项目介绍、项目的搭建、开发流程以及相关面试题

目录 一、项目介绍 二、项目搭建 三、开发流程 四、相关面试题 五、总结 一、项目介绍 背景 业务 技术 背景:首先是整个这个行业的背景 然后基于这个行业的背景引出当前项目的背景 业务:功能模块 功能业务流程 技术:整体架构&am…

Android 特权应用 privapp-permissions 权限解读

特权应用 官网说明 特权应用是位于系统映像某个分区上 priv-app 目录下的应用,如 system/priv-app/ 。 特权应用 相比安装在 system/app/ 目录的应用,具有更高的权限。基本都是系统预装,不可卸载。可以不是系统签名。 源码预制 源码下预…

061:mapboxGL利用fitBounds同时将多个点放在可视范围内

第061个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载geojson数据,利用fitBounds同时将多个点放在可视范围内。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共134行)相关API参考:专栏目标示例…

vscode中快速生成vue3模板

步骤:设置 -> 用户代码片段 -> vue.json(没有vue.json,选vue也可)-> 定义自己所需的代码段 代码段 如下, {"Print to console": {"prefix": "vue3", //键入该值,按tab…