OpenCV——总结《车牌识别》之《常用的函数介绍》

news2024/12/27 12:07:55

1.

cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))

element = cv2.getStructuringElement(shape, ksize[, anchor])

用于创建形态学操作的结构元素(structuring element)。

参数解释:

shape:结构元素的形状,可以是以下值之一:
cv2.MORPH_RECT:矩形结构元素。
cv2.MORPH_CROSS:十字形结构元素。
cv2.MORPH_ELLIPSE:椭圆形结构元素。

ksize:结构元素的尺寸,表示结构元素的宽度和高度。可以是一个整数,表示正方形结构元素的边长;或者是一个元组 (width, height),表示矩形结构元素的宽度和高度。

anchor:可选参数,表示结构元素的锚点位置,默认为 (-1, -1),表示将锚点设置在结构元素的中心位置。
返回值:

element:创建的结构元素,可以用于形态学操作(如膨胀、腐蚀、开运算、闭运算等)。

2.

cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, kernel)#进行闭运算,sd。首先进行膨胀后进行腐蚀操作,去除白色中的黑色点。

dst = cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

形态学操作函数之一,用于对图像进行形态学运算。

参数解释:

src:输入图像,可以是单通道(灰度图)或多通道(彩色图)。
op:形态学操作类型,可以是以下值之一:
cv2.MORPH_ERODE:腐蚀操作。
cv2.MORPH_DILATE:膨胀操作。
cv2.MORPH_OPEN:开运算(先腐蚀后膨胀)。
cv2.MORPH_CLOSE:闭运算(先膨胀后腐蚀)。
cv2.MORPH_GRADIENT:形态学梯度(膨胀图像与腐蚀图像的差异)。
cv2.MORPH_TOPHAT:顶帽运算(原始图像与开运算结果的差异)。
cv2.MORPH_BLACKHAT:黑帽运算(闭运算结果与原始图像的差异)。
kernel:结构元素(kernel)用于指定形态学操作的范围和形状。

dst:可选参数,输出图像,与输入图像具有相同的大小和通道数。

anchor:可选参数,锚点位置,默认为 (-1, -1),表示将锚点设置在结构元素的中心位置。

iterations:可选参数,指定形态学操作的迭代次数,默认为 1。

borderType:可选参数,边界扩充类型,默认为 cv2.BORDER_CONSTANT。

borderValue:可选参数,边界填充值,默认为 0。
返回值:

dst:形态学操作的结果图像。

3.

cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY)#可以理解为简单滤波

ret, thresh = cv2.threshold(src, thresh, maxval, type[, dst])

用于将图像进行二值化处理。
参数解释:

src:输入的图像,通常为灰度图像(单通道图像)。
thresh:阈值,用于将图像的像素值与该阈值进行比较。
maxval:当像素值大于阈值时,设置的像素值。
type:二值化类型,指定了如何将像素值与阈值进行比较和赋值。常用的类型有:
cv2.THRESH_BINARY:大于阈值的像素值设置为 maxval,小于等于阈值的像素值设置为 0。
cv2.THRESH_BINARY_INV:大于阈值的像素值设置为 0,小于等于阈值的像素值设置为 maxval。
cv2.THRESH_TRUNC:大于阈值的像素值设置为阈值,小于等于阈值的像素值保持不变。
cv2.THRESH_TOZERO:大于阈值的像素值保持不变,小于等于阈值的像素值设置为 0。
cv2.THRESH_TOZERO_INV:大于阈值的像素值设置为 0,小于等于阈值的像素值保持不变。
dst:可选参数,输出的二值化图像,与输入图像 src 的大小和类型相同。
返回值:

ret:计算得到的阈值。
thresh:二值化后的图像。
例子代码

import cv2

# 读取灰度图像
image = cv2.imread('image.jpg', 0)

# 进行二值化处理
ret, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# 显示原图和二值化图像
cv2.imshow('Original Image', image)
cv2.imshow('Thresholded Image', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.

# 查找图像边缘整体形成的矩形区域,可能有很多,车牌就在其中一个矩形区域中
contours, hierarchy = cv2.findContours(img_edge2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

参数解释:

image:输入图像,通常为二值图像(黑白图像)。
mode:轮廓检索模式,定义了轮廓的层次结构。常见的取值有:
cv2.RETR_EXTERNAL:仅检测外部轮廓。
cv2.RETR_LIST:检测所有轮廓,不建立层次关系。
cv2.RETR_CCOMP:检测所有轮廓,建立两层层次关系。
cv2.RETR_TREE:检测所有轮廓,建立完整的层次结构。
method:轮廓近似方法,用于压缩轮廓。常见的取值有:
cv2.CHAIN_APPROX_NONE:存储所有的轮廓点。
cv2.CHAIN_APPROX_SIMPLE:仅存储轮廓的端点。
cv2.CHAIN_APPROX_TC89_L1:使用 Teh-Chin 链逼近算法。
cv2.CHAIN_APPROX_TC89_KCOS:使用 Teh-Chin 链逼近算法。
contours:可选参数,检测到的轮廓列表。
hierarchy:可选参数,轮廓层次结构。
返回值:

contours:检测到的轮廓列表。
hierarchy:轮廓的层次结构,每个轮廓对应四个整数 [Next, Previous, First_Child, Parent]。
这个是contours返回的值的内容。
请添加图片描述

5.

for c in contours:
    x, y, w, h = cv2.boundingRect(c)#这个函数就是用来返回值使用的。

x, y, w, h = cv2.boundingRect(contour)

函数用于计算轮廓的边界矩形,即给出包围轮廓的最小矩形框。
参数解释:

contour:输入的轮廓。
返回值:

x:边界矩形左上角点的 x 坐标。
y:边界矩形左上角点的 y 坐标。
w:边界矩形的宽度。
h:边界矩形的高度。
使用 cv2.boundingRect() 函数可以获取轮廓的边界矩形信息,包括左上角点的坐标 (x, y) 以及矩形的宽度 w 和高度 h。这些信息可以用于进一步分析和处理轮廓,例如在图像中绘制边界矩形或提取矩形区域内的图像内容。在这里能够找到车牌的信息。

6.

rect = cv2.minAreaRect(c)

retval, box = cv2.minAreaRect(points)

用于计算给定点集的最小外接矩形。最小外接矩形是能够完全包围点集并且具有最小面积的矩形。

参数解释:

points:要计算最小外接矩形的输入点集,可以是一个 Numpy 数组或者一个包含点的 Python 列表。
retval:返回值,表示最小外接矩形的相关信息。通常不会使用到该返回值。
box:最小外接矩形的信息,返回一个 ((center_x, center_y), (width, height), angle) 的元组,其中:
(center_x, center_y):最小外接矩形的中心点坐标。
(width, height):最小外接矩形的宽度和高度。
angle:最小外接矩形相对于水平方向的旋转角度。
例子

import cv2
import numpy as np

# 定义一个点集
points = np.array([[100, 50], [200, 100], [150, 200], [50, 150]], dtype=np.int32)

# 计算最小外接矩形
retval, box = cv2.minAreaRect(points)

# 提取最小外接矩形的信息
center, size, angle = box
width, height = size

# 在图像上绘制最小外接矩形
rect_points = cv2.boxPoints(box).astype(np.int32)
cv2.drawContours(image, [rect_points], 0, (0, 255, 0), 2)

# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

7.

area = cv2.contourArea(contour)

用于计算给定轮廓的面积。轮廓是由一系列连续的点组成的闭合曲线。

参数解释:

contour:要计算面积的轮廓,可以是一个包含点的 Numpy 数组。
返回值:

area:轮廓的面积,以像素为单位。
代码

import cv2
import numpy as np

# 读取图像并进行灰度化和二值化处理
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 寻找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 计算轮廓的面积
for contour in contours:
    area = cv2.contourArea(contour)
    print("Contour Area:", area)

# 绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

9.

points = cv2.boxPoints(box)

参数解释:

box:输入的旋转矩形,可以通过 cv2.minAreaRect() 函数计算得到。
返回值:

points:旋转矩形的四个角点坐标,返回的是一个包含四个坐标点的 Numpy 数组。
示例用法:

import cv2

# 创建一个旋转矩形
center = (100, 100)
size = (200, 100)
angle = 30
rect = (center, size, angle)

# 计算旋转矩形的四个角点坐标
points = cv2.boxPoints(rect)
print("Points:", points)

# 将浮点型坐标点转换为整数型
points = np.int0(points)

# 绘制旋转矩形
image = np.zeros((200, 200), dtype=np.uint8)
cv2.drawContours(image, [points], 0, 255, 2)

# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.boxPoints() 函数的输入参数是一个旋转矩形,该旋转矩形可以通过 cv2.minAreaRect() 函数计算得到。cv2.boxPoints() 函数返回的角点坐标是按照顺时针方向排列的。

10.

cv2.drawContours() 和 cv2.rectangle() 是 OpenCV 中用于绘制轮廓和矩形的函数,它们之间有以下区别:

绘制对象:

cv2.drawContours(image, contours, contourIdx, color, thickness) 用于绘制轮廓,其中 image 是要在其上绘制轮廓的图像,contours 是轮廓的列表或数组,contourIdx 是要绘制的轮廓索引(-1 表示绘制所有轮廓),color 是轮廓的颜色,thickness 是轮廓的线宽度。
cv2.rectangle(image, pt1, pt2, color, thickness) 用于绘制矩形,其中 image 是要在其上绘制矩形的图像,pt1 是矩形的左上角坐标,pt2 是矩形的右下角坐标,color 是矩形的颜色,thickness 是矩形的边框线宽度。
使用场景:

cv2.drawContours() 适用于绘制复杂的轮廓,可以绘制闭合的和非闭合的轮廓,可以选择绘制单个轮廓或多个轮廓,常用于轮廓检测和分析。
cv2.rectangle() 适用于绘制简单的矩形,绘制的矩形是一个闭合的四边形,常用于标记和定位目标区域。
总结:cv2.drawContours() 用于绘制轮廓,而 cv2.rectangle() 用于绘制矩形。它们的主要区别在于绘制的对象不同,cv2.drawContours() 可以绘制任意形状的轮廓,而 cv2.rectangle() 绘制的是矩形。

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

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

相关文章

k近邻算法

文章目录 一、K近邻算法(K Nearest Neighbor algorithm, KNN)1.概念2.流程3.问题——不能用来图像分类1)图像分类2)为什么不能用来图像分类3)数据库样例:CIFAR-10 二、HEU的K近邻算法1.概念2.伪代码3.k近邻算法是非线性分类算法4.…

java项目之教学视频点播系统ssm

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的教学视频点播系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&…

SVM支持向量机理解_KKT条件_拉格朗日对偶_SMO算法代码

目录 一、支持向量机基本型(线性可分) 1.1 问题描述 1.2 参考资料 二、KKT条件 2.1 KKT条件的几个部分 2.1.1 原始条件 2.1.2 梯度条件 2.1.3 松弛互补条件 2.1.4 KKT条件小结 2.2 参考资料 三、对偶形式 3.1 由原始问题到对偶问题 3.2 对偶…

ubuntu双系统安装

1. 下载系统 国内镜像 http://mirrors.ustc.edu.cn/ubuntu-releases/2. U盘启动盘 Rufus 软件 制作U盘启动盘 Rufus 链接 https://rufus.en.softonic.com/3. 磁盘中准备一定未分配磁盘 我准备了100G 4. BIOS启动项选择为usb启动(每个品牌进BIOS不同&#xff0…

win下 Nginx.conf 路径配置注意事项(win)

win下 Nginx.conf 路径配置注意事项 文章目录 可使用win绝对路径路径不能包含中文路径不能包含空格路径中的"\n"会被识别成换行贴一段正确配置的Nginx.conf代码 可使用win绝对路径 网上有种说法是win下Nginx不能设置绝对路径,但我在Nginx-1.24.0下是设置…

在Windows11中安装WSL2(Ubuntu20.04)并配置Anaconda环境

在Windows11中安装WSL2(Ubuntu20.04)并配置Anaconda环境 文章目录 在Windows11中安装WSL2(Ubuntu20.04)并配置Anaconda环境说在前面1. 检查开启CPU虚拟化和虚拟机平台2. 安装Ubuntu20.043. Vscode连接WSL2(Ubuntu20.04)4. Anaconda开发环境的搭建5. Vscode 访问 notebook结尾 说…

高效视觉识别的动态感知器

文章目录 Dynamic Perceiver for Efficient Visual Recognition摘要本文方法实验结果 Dynamic Perceiver for Efficient Visual Recognition 摘要 Early exiting已成为提高深度网络推理效率的一种很有前途的方法。通过构建具有多个分类器(出口)的模型,可以在较早的…

佩戴舒适的蓝牙耳机有哪些?公认佩戴舒适性不错的蓝牙耳机推荐

​都2023年了,不会还有人没有一款蓝牙耳机吧?随着蓝牙耳机的增长,越来越多人不知道如何挑选蓝牙耳机了,蓝牙耳机除了音质表现要好之外,还有就是佩戴舒适性不能差,防水性能要有,接下来&#xff0…

WPF 的几种模板概念

WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板,DataTemplate是数据模板,他们都派生自FrameworkTemplate抽象类。 看看如下继承图: ControlTemplate <Style TargetType="Button">&…

MiniGPT-4 模型学习与实战

1 前言 MiniGPT-4 是一个冻结的视觉编码器(Q-Former&ViT)与一个冻结的 文本生成大模型&#xff08;Vicuna&#xff0c;江湖人称&#xff1a;小羊驼&#xff09; 进行对齐造出来的。 MiniGPT-4 具有许多类似于 GPT-4 的能力, 图像描述生成、从手写草稿创建网站等MiniGPT-4…

bitbucket 配置 SSH keys

目录 问题 配置方法 生成SSH key 添加SSH key至SSH Agent 添加公钥至Bitbucket 执行Git clone 问题 拉取bitbucket上的代码需要配置SSH key Configure SSH and two-step verification | Bitbucket Cloud | Atlassian Support 以Linux为例&#xff1a; Set up persona…

WebSocket 的介绍及基本使用

websocket 什么是 websocket ? https://websocket.org/ 是一种网络通信协议&#xff0c;和 HTTP 协议 一样。 为什么需要websocket ? 因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客户端发起。 了解 websocket api含义 基于原生的 websocket 完成服务端和客户端的通…

使用指针突破类的private限制

使用指针突破类的private限制 继承的内存模型使用指针再子类中访问父类的私有变量 继承的内存模型 创建派生类对象时只会申请一次内存&#xff0c;派生类对象包含了基类对象的内存空间&#xff0c;this指针相同的。创建派生类对象时&#xff0c;先初始化基类对象&#xff0c;再…

Oracle数据库安全评估工具(DBSAT)

目录&#xff1a; 工具概述&#xff1a;先决条件&#xff1a;一、支持的操作系统及DB版本&#xff1a;1.支持的操作系统2.支持的数据库版本 二、评估工具的前提条件&#xff1a;1.所需安装包及工具2.Collector的先决条件3.Reporter的先决条件4.Discoverer的先决条件 工具下载&a…

23vue3铺垫知识——ES6模块化与异步编程高级用法

文章目录 一、ES6模块化1、回顾:nodejs中如何实现模块化2、前端模块化规范的分类3、什么是ES6模块化规范4、在nodeis中体验ES6模块化5、ES6模块化的基本语法5.1 默认导出与默认导入5.2 按需导出与按需导入5.3直接导入并执行模块中的代码 二、Promise1、回调地狱1.1 如何解决回调…

iptables 限制转发

概述 可以通过设置内核参数来启动或停止内核的转发 sysctl -w net.ipv4.ip_forward1当开启了Linux内核转发 cat /proc/sys/net/ipv4/ip_forward开启内核转发后&#xff0c;当Linux主机收到不属于自己IP的数据包时&#xff0c;将会根据主机上配置的路由表进行转发&#xff0c…

kubernetes的二进制安装

二进制搭建 Kubernetes v1.20 k8s集群master01&#xff1a;192.168.232.37 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.232.7 k8s集群node01&#xff1a;192.168.232.47 kubelet kube-proxy docker k8s集群node…

Android jar包的生成与使用

前言 Android中常见的第三方库有&#xff1a; *.so&#xff0c;*.jar&#xff0c;*.aar&#xff0c;今天给大家分享一下jar文件&#xff0c;在Android应用程序开发中&#xff0c;我们需要使用一些Java库&#xff0c;可能这个库是自己封装好的或者第三方的库&#xff0c;我们每…

收入指引令人失望,股票回购不积极,满帮(YMM)面临监管风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 收入指引令人失望 上个月末&#xff0c;满帮&#xff08;YMM&#xff09;公布了2023年第一季度的财务业绩&#xff0c;同时还公布了2023年第二季度的管理指引。 满帮预计其2023年第二季度的收入将在19.10亿元至20.10亿元之…

【SwinFusion:通用网络框架 :Swin Transformer】

SwinFusion: Cross-domain Long-range Learning for General Image Fusion via Swin Transformer &#xff08;SwinFusion&#xff1a;基于Swin Transformer的跨域远程学习通用图像融合&#xff09; 提出了一种基于跨域远程学习和Swin Transformer的通用图像融合框架SwinFusi…