当前位置: 首页 > news >正文

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.lryc.cn/news/94202.html

相关文章:

  • chatgpt赋能python:如何利用Python进行自动化办公
  • linux-2.6.22.6内核网卡驱动框架分析
  • 机器学习7:特征工程
  • coverage代码覆盖率测试介绍
  • 使用 Debian、Docker 和 Nginx 部署 Web 应用
  • Redis原理 - 内存策略
  • 【计算机网络】IP 地址处理函数
  • 9i物联网浏览器(cef_114.2.110114.2.100支持H264视频)WinForm-CefSharp114(5735)视频版本体验
  • 如何在本地运行一个已关服但具有客户端的游戏
  • C语言编程—预处理器
  • 使用 Maya Mari 设计 3D 波斯风格道具(p1)
  • Redis分布式问题
  • synchronized原理
  • 10G光模块能兼容千兆光口吗
  • css 显示省略号 和 动态显示省略号
  • LeetCode 1253. 重构 2 行二进制矩阵
  • 【八股】【C++】内存
  • 数据库G等待
  • PCB封装设计指导(一)基础知识
  • Flask框架之Restful--介绍--下载--基本使用
  • 2023年上海市浦东新区网络安全管理员决赛理论题样题
  • SQL语言的四大组成部分——DCL(数据控制语言)
  • ChatGPT新功能曝光:可记住用户信息、上传文件和工作区
  • 【Unity编辑器扩展】(三)PSD转UGUI Prefab, 一键拼UI解放美术/程序(完结)
  • SpringBoot开发Restful风格的接口实现CRUD功能
  • 【Servlet学习三】实现一个内存版本的简易计算器~
  • Linux c语言获取本机网关 ip 地址
  • nginx部署本地项目如何让异地公网访问?服务器端口映射配置!
  • 云时代已至,新一代数据分析平台是如何实现的?
  • 【C#】简单聊下Framework框架下的事务