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

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.hqwc.cn/news/2821.html

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

相关文章

如何查看 Facebook 公共主页的广告数量上限?

作为Facebook的资深人员,了解如何查看公共主页的广告数量上限对于有效管理和优化广告策略至关重要。本文将详细介绍如何轻松查看Facebook公共主页的广告数量上限,以帮助您更好地掌握广告投放策略。 一、什么是Facebook公共主页的广告数量上限&#xff1f…

基于 FPGA 的单脉冲技术:算法设计(附源码)

一、前言 本例显示了开发单脉冲技术的工作流程的前半部分,其中信号使用数字下变频(DDC)进行下变频。本例中的模型适合在FPGA上实现。本示例重点介绍单脉冲技术的设计,以估计物体的方位角和仰角。 示例的第二部分是基于FPGA的单脉冲…

如何设计一个文件系统?需要考虑哪些因素?

文件系统的实现 在对文件有了基本认识之后,现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么,如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间…

信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复)信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网…

消防通道堵塞识别 opencv

消防通道堵塞识别系统通过opencvpython网络模型技术,消防通道堵塞识别对消防通道的状态进行实时监测,检测到消防通道被堵塞时,将自动发出警报提示相关人员及时采取措施。OpenCV的全称是Open Source Computer Vision Library,是一个…

SPI总线

目录 声明 1、 SPI简介 2、 SPI特点 2.1采用主-从模式(Master-Slave) 的控制方式 2.2采用同步方式(Synchronous)传输数据 2.3数据交换(Data Exchanges) 2.4 SPI有四种传输模式 2.5 SPI只有主模式和从模式之分。 3、 工作机制 3.1概述 3.2 Timing 声明 转自&#xf…

【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板,处理器集成PS端双核ARM Cortex-A9 PL端Artix-7架构28nm可编程逻辑资源,通过工业级B2B连接器引出千兆网口、USB、CAN、UA…

抖音矩阵系统源代码开发部署--源码搭建

抖音seo矩阵系统文章目录技术囊括(一) 源代码开发配置文档 抖音SEO矩阵系统的主要架构如下源代码开发关键技术 源代码开发交付形式 短视频账号矩阵系统开发者必备能力语言? 概要 一、系统设计 1.需求分析 抖音SEO矩阵系统的主要功能是提…

string类学习

本篇将深入学习string类,通过各个测试函数玩遍cstring类,学到就是赚到!!! 文章目录 1.头文件和源文件1.1源文件1.2头文件 2.构造函数3.赋值重载函数4.元素访问运算符5.迭代器5.1正向迭代器5.2反向迭代器 6.添加字符串…

2023年java还是golang还是c#?

前言 我们可以先来看一下这三门语言各自的优劣 学习曲线:如果你是初学者或对编程相对陌生,Java可能是一个较好的选择。它有广泛的学习资源和社区支持,易于上手。Go也有简单易学的特点,但由于相对较年轻,相关的学习资…

KEIL5-MDK配色方案

改字体 复制如下代码,替换原有文件内容 global.prop文件:D:Keil_v5\UV4\global.prop # properties for all file types indent.automatic1 virtual.space0 view.whitespace0 view.endofline0 code.page0 caretline.visible0 highlight.matchingbraces1 …

Redis是什么?(详细安装步骤)

一、Redis简介🍉 背景 在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高、交互也较少。而在后来,随着访问量的提升,使用关系型数据库的Web站点多多少少…