第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

传奇开心果短博文系列

  • 系列短博文目录
    • Python的OpenCV库技术点案例示例系列
  • 短博文目录
    • 前言
    • 一、OpenCV 文字识别介绍
    • 二、图像预处理示例代码
    • 三、文字区域检测示例代码
    • 四、文字识别示例代码
    • 五、文字后处理示例代码
    • 六、OpenCV结合Tesseract OCR库实现文字识别示例代码
    • 七、OpenCV结合OCRopus库文字识别示例代码
    • 八、OpenCV 结合Google Cloud Vision API 文字识别示例代码
    • 九、OpenCV结合图像预处理技术文字识别示例代码
    • 十、OpenCV结合文字区域检测技术文字识别示例代码
    • 十一、归纳总结

系列短博文目录

Python的OpenCV库技术点案例示例系列

短博文目录

前言

在这里插入图片描述OpenCV文字识别与OCR:用于识别图像中的文字内容,并进行光学字符识别。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理计算机视觉算法。虽然CV 本身并不包含专门的 OCR(Optical Character Recognition,光学字符识别)功能,但可以配合其他 OCR 引擎或库来实现图像中的文字识别。
OCR 是一种将图像中的文本内容转换为可编辑文本的技术。它可以应用于各种场景,如自动化数据录入、图像搜索、车牌识别、文档扫描等。

一、OpenCV 文字识别介绍

在这里插入图片描述(一)在使用 OpenCV 进行文字识别时,通常的步骤如下:

  1. 图像预处理:使用 OpenCV 的图像处理功能,如灰度化、二值化、滤波等,对图像进行预处理,以提高文字识别的准确性。

  2. 文字区域检测:通过边缘检测、轮廓检测等技术,找到图像中的文字区域。

  3. 文字识别:将文字区域提取出来,使用 OCR 引擎或库进行光学字符识别。常见的 OCR 引擎包括 Tesseract、OCRopus、Google Cloud Vision 等。

  4. 文字后处理:对识别结果进行后处理,如去除噪声、校正错误、整理格式等。

(二)OpenCV结合其他 OCR 引擎或库来实现完整的文字识别功能
在实际应用中,可以根据项目需求选择合适的 OCR 引擎,并结合 OpenCV 进行图像处理和文字区域检测,以实现准确的文字识别功能。
下面补充一些关于OpenCV文字识别与OCR的信息:

  1. Tesseract OCR:Tesseract 是一个开源的 OCR 引擎,由 Google 开发和维护。它支持多种语言,并且具有较高的文字识别准确性。你可以使用 Tesseract OCR 库来配合 OpenCV 进行文字识别。

  2. OCRopus:OCRopus 是基于 Tesseract 的 OCR 引擎,提供了更多的自定义和扩展性。它允许你根据特定需求进行训练和优化,以提高文字识别的效果。

  3. Google Cloud Vision API:Google Cloud Vision 是一种云端 OCR 服务,提供了强大的文字识别功能。它可以处理多种图像类型,包括扫描文档、照片、屏幕截图等,并提供了准确的文字识别结果。

  4. 图像预处理技术:在文字识别之前,通常需要对图像进行预处理来提高识别准确性。常见的预处理技术包括灰度化、二值化、去噪、图像增强等。OpenCV 提供了丰富的图像处理函数和算法,可以用于这些预处理步骤。

  5. 文字区域检测技术:在文字识别过程中,需要确定图像中的文字区域。常用的文字区域检测技术包括边缘检测、轮廓检测、连通组件分析等。OpenCV 提供了这些功能的实现方法,可以帮助你找到图像中的文字区域。

总之,OpenCV 是一个强大的计算机视觉库,可以与 OCR 引擎结合使用,实现图像中的文字识别。通过合理选择 OCR 引擎,并结合适当的图像预处理和文字区域检测技术,可以获得准确和高效的文字识别结果。

二、图像预处理示例代码

在这里插入图片描述以下是使用 OpenCV 进行图像预处理的示例代码,包括灰度化、二值化和滤波:

import cv2# 读取图像
image = cv2.imread('image.jpg')# 灰度化
P = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 中值滤波
filtered = cv2.medianBlur(binary, 3)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Grayscale Image', gray)
cv2.imshow('Binary Image', binary)
cv2.imshow('Filtered Image', filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述示例中,首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

接下来,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,将结果存储在 gray 变量中。

然后,使用 cv2.threshold() 函数对灰度图像进行二值化处理。通过设定阈值和使用 OTSU 自适应阈值算法,将灰度图像转换为二值图像,将结果存储在 binary 变量中。

最后,使用 cv2.medianBlur() 函数对二值图像进行中值滤波,以去除噪声。将滤波后的图像存储在 filtered 变量中。

最后,使用 cv2.imshow() 函数显示原始图像、灰度图像、二值图像和滤波后的图像。使用 cv2.waitKey() 函数等待键盘输入,最后使用 cv2.destroyAllWindows() 函数关闭窗口。

这些预处理步骤可以根据需要进行调整和组合,以提高文字识别的准确性和质量。请根据实际情况选择适合的预处理方法。

三、文字区域检测示例代码

在这里插入图片描述以下是使用 OpenCV 进行文字区域检测的示例代码,包括边缘检测和轮廓检测:

import cv2# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 边缘检测
edges = cv2.Canny(gray, 50, 150)# 轮廓检测
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制矩形框
for contour in contours:x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上述示例中,首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

接下来,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,将结果存储在 gray 变量中。

然后,使用 cv2.Canny() 函数进行边缘检测,将结果存储在 edges 变量中。在这个示例中,我们使用 Canny 边缘检测算法,设定阈值为 50 和 150。

最后,使用 cv2.findContours() 函数对边缘图像进行轮廓检测,将轮廓结果存储在 contours 变量中。我们使用 cv2.RETR_EXTERNAL 参数表示只检测外部轮廓,并使用 cv2.CHAIN_APPROX_SIMPLE 参数表示使用简化的轮廓表示。

接下来,使用 cv2.rectangle() 函数在原始图像上绘制矩形框,标识出文字区域。通过 cv2.boundingRect() 函数获取每个轮廓的边界框坐标,然后使用 cv2.rectangle() 函数绘制矩形框。

最后,使用 cv2.imshow() 函数显示原始图像和边缘图像。使用 cv2.waitKey() 函数等待键盘输入,最后使用 cv2.destroyAllWindows() 函数关闭窗口。

请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行参数调整和算法优化,以达到更好的文字区域检测效果。

四、文字识别示例代码

在这里插入图片描述以下是使用 OpenCV 进行文字识别的示例代码,结合 Tesseract OCR 引擎进行光学字符识别:

import cv2
import pytesseract# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 使用 Tesseract 进行文字识别
result = pytesseract.image_to_string(binary, lang='eng')# 打印识别结果
print(result)

在上述示例中,首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

接下来,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,将结果存储在 gray 变量中。

然后,使用 cv2.threshold() 函数对灰度图像进行二值化处理,将结果存储在 binary 变量中。在这个示例中,我们使用了 OTSU 自适应阈值算法。

最后,使用 pytesseract.image_to_string() 函数将二值图像传递给 Tesseract OCR 引擎进行文字识别。通过指定 lang 参数来选择使用的语言,这里使用了英文 'eng'

识别结果会存储在 result 变量中,你可以根据需要进行后续处理或打印输出。

请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。此外,你也可以选择其他 OCR 引擎或库来替代 Tesseract,如 OCRopus 或 Google Cloud Vision,使用方法类似。

五、文字后处理示例代码

在这里插入图片描述文字后处理是在文字识别完成后对识别结果进行进一步处理的步骤,常见的后处理操作包括去除噪声、校正错误和整理格式。以下是一个简单的示例代码,展示了如何使用 Python 进行文字后处理:

import redef postprocess_text(text):# 去除非字母和数字的字符text = re.sub(r'[^a-zA-Z0-9]', '', text)# 校正错误# ...# 整理格式# ...return text# 假设识别结果存储在 result 变量中
result = "H3llo, W0r1d!"# 进行文字后处理
processed_text = postprocess_text(result)# 打印处理后的结果
print(processed_text)

在上述示例中,我们定义了一个 postprocess_text() 函数来执行文字后处理操作。这个函数使用正则表达式 re.sub() 来去除非字母和数字的字符,只保留字母和数字。你可以根据实际需求定制自己的规则来去除其他特定字符。

除了去除噪声外,文字后处理还可以用于校正识别错误和整理识别结果的格式。校正错误的方法可以根据实际情况选择,例如使用拼写纠正算法或者通过与词典进行比对来进行修正。整理格式的方法也可以根据需求进行定制,例如添加分隔符、调整字母大小写等。

在示例代码中,我们假设识别结果存储在 result 变量中,然后将其传递给 postprocess_text() 函数进行后处理。处理后的结果存储在 processed_text 变量中,并打印输出。

请注意,这只是一个简单的示例代码,实际的文字后处理操作可能会更加复杂,需要根据具体需求进行定制。你可以根据实际情况来编写适合你的后处理函数,以提高文字识别结果的准确性和质量。

六、OpenCV结合Tesseract OCR库实现文字识别示例代码

在这里插入图片描述以下是一个示例代码,展示了如何结合 OpenCV 和 Tesseract OCR 进行文字识别:

import cv2
import pytesseract# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 使用 Tesseract 进行文字识别
result = pytesseract.image_to_string(binary, lang='eng')# 打印识别结果
print(result)

在上述示例中,我们首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

接下来,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,将结果存储在 gray 变量中。

然后,使用 cv2.threshold() 函数对灰度图像进行二值化处理,将结果存储在 binary 变量中。在这个示例中,我们使用了 OTSU 自适应阈值算法。

最后,使用 pytesseract.image_to_string() 函数将二值图像传递给 Tesseract OCR 引擎进行文字识别。通过指定 lang 参数来选择使用的语言,这里使用了英文 'eng'

识别结果会存储在 result 变量中,你可以根据需要进行后续处理或打印输出。

请注意,运行此代码之前,你需要先安装并配置好 OpenCV 和 Tesseract OCR。你可以通过 pip install opencv-pythonpip install pytesseract 命令来安装相应的库。同时,确保已经下载并安装了 Tesseract OCR 的语言数据包,以支持相应语言的识别。

这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。你还可以通过调整 Tesseract OCR 的参数来优化识别结果,例如设置字典、调整识别方式等。

七、OpenCV结合OCRopus库文字识别示例代码

在这里插入图片描述OCRopus 是一个基于 Tesseract 的 OCR 引擎,它提供了更多的自定义和扩展性,允许你根据特定需求进行训练和优化,以提高文字识别的效果。下面是一个使用 OpenCV 结合 OCRopus 进行文字识别的示例代码:

import cv2
from ocropy import ocrolib# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 保存图像到临时文件
cv2.imwrite('temp.png', binary)# 使用 OCRopus 进行文字识别
ocrolib.iopen('temp.png').binarize().write_page('temp.ocropus')
ocrolib.tesseract_page('temp.ocropus').write_text()# 读取识别结果
with open('temp.txt', 'r', encoding='utf-8') as file:result = file.read()# 打印识别结果
print(result)

在上述示例中,我们首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

接下来,使用 cv2.cvtColor() 函数将彩色图像转换为灰度图像,将结果存储在 gray 变量中。

然后,使用 cv2.threshold() 函数对灰度图像进行二值化处理,将结果存储在 binary 变量中。在这个示例中,我们使用了 OTSU 自适应阈值算法。

接下来,我们将二值图像保存到临时文件 temp.png 中,以便 OCRopus 进行处理。

然后,使用 OCRopus 的 ocrolib 模块来进行文字识别。我们首先使用 ocrolib.iopen() 函数打开二值图像文件,然后使用 .binarize() 方法对图像进行二值化处理,并将处理结果保存为 OCRopus 的页面格式 temp.ocropus

接着,使用 ocrolib.tesseract_page() 函数对页面进行 OCR 识别,并将识别结果保存为文本文件 temp.txt

最后,我们读取文本文件中的识别结果,并将其存储在 result 变量中。你可以根据需要进行后续处理或打印输出。

请注意,在运行此代码之前,你需要先安装并配置好 OCRopus 和 Tesseract OCR。你可以通过 pip install ocropy 命令来安装 OCRopus。同时,确保已经下载并安装了 Tesseract OCR 的语言数据包,以支持相应语言的识别。

这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。你还可以根据需要调整 OCRopus 的参数和配置文件,以优化识别结果。

八、OpenCV 结合Google Cloud Vision API 文字识别示例代码

要结合 OpenCV 和 Google Cloud Vision API 进行文字识别,你需要先设置好 Google Cloud 平台的相关服务,并安装 google-cloud-vision 库。下面是一个示例代码,展示了如何使用 OpenCV 结合 Google Cloud Vision API 进行文字识别:

import cv2
from google.cloud import vision# 读取图像
image = cv2.imread('image.jpg')# 将图像转换为字节流
_, img_encoded = cv2.imencode('.jpg', image)
img_bytes = img_encoded.tobytes()# 使用 Google Cloud Vision API 进行文字识别
client = vision.ImageAnnotatorClient()
image = vision.Image(content=img_bytes)
response = client.text_detection(image=image)
texts = response.text_annotations# 打印识别结果
for text in texts:print(text.description)

在上述示例中,我们首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

然后,我们使用 cv2.imencode() 函数将图像编码为 JPG 格式的字节流,然后将其转换为字节字符串 img_bytes

接下来,我们使用 google-cloud-vision 库中的 ImageAnnotatorClient 类创建一个 Cloud Vision API 的客户端。

然后,我们将图像字节字符串传递给 vision.Image 类创建一个图像对象 image

接着,我们使用 client.text_detection() 方法对图像进行文字识别,返回一个包含文字信息的响应对象 response

最后,我们从响应对象中提取出识别结果 texts,并遍历打印每个文字块的内容。

请注意,在运行此代码之前,你需要先在 Google Cloud 平台上创建一个项目,并启用 Vision API 服务。然后,你需要安装 google-cloud-vision 库,并配置好你的身份验证凭据。

此外,你还可以根据需要,使用 Cloud Vision API 的其他功能,如检测文字语言、识别文本坐标等。具体的 API 使用方法和参数设置可以参考 Google Cloud Vision API 的官方文档。

这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行图像预处理、文字区域检测等步骤,以达到更好的文字识别效果。同时,你需要根据你的实际需求和云平台的限制,选择适合的服务套餐和配置。

九、OpenCV结合图像预处理技术文字识别示例代码

在这里插入图片描述在文字识别之前,进行图像预处理是提高识别准确性的重要步骤。OpenCV 提供了丰富的图像处理函数和算法,可以用于各种预处理技术。以下是一些常见的预处理技术示例代码:

  1. 灰度化:
import cv2# 读取彩色图像
image = cv2.imread('image.jpg')# 将图像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  1. 二值化:
import cv2# 读取灰度图像
gray = cv2.imread('gray_image.jpg', 0)# 使用固定阈值二值化
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 使用自适应阈值二值化
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
  1. 去噪:
import cv2# 读取图像
image = cv2.imread('image.jpg')# 使用中值滤波去除噪声
denoised = cv2.medianBlur(image, 5)# 使用高斯滤波去除噪声
denoised = cv2.GaussianBlur(image, (5, 5), 0)
  1. 图像增强:
import cv2
import numpy as np# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 直方图均衡化
equalized = cv2.equalizeHist(gray)# 自适应直方图均衡化
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
adaptive_equalized = clahe.apply(gray)

这些是一些常见的图像预处理技术示例代码,你可以根据具体情况选择适合的预处理步骤和参数。在实际应用中,可能需要结合多种预处理技术,并进行参数调整和优化,以获得最佳的文字识别效果。

请注意,在使用 OpenCV 进行图像预处理时,可以根据图像的特点和需求选择适当的函数和算法。同时,还可以结合其他图像处理库或算法,如 PIL、numpy 等,以实现更复杂的图像处理任务。

这些示例代码只是为了演示常见的图像预处理技术,并不能覆盖所有情况。在实际应用中,你可能需要根据具体需求进行更详细和复杂的图像处理操作。

十、OpenCV结合文字区域检测技术文字识别示例代码

在这里插入图片描述在文字识别过程中,确定图像中的文字区域是一个关键步骤。OpenCV 提供了多种文字区域检测技术的实现方法,包括边缘检测、轮廓检测和连通组件分析。以下是一些示例代码,展示了如何使用 OpenCV 结合这些技术来识别文字区域:

  1. 边缘检测:
import cv2# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# Canny 边缘检测
edges = cv2.Canny(gray, 50, 150)
  1. 轮廓检测:
import cv2# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  1. 连通组件分析:
import cv2# 读取图像
image = cv2.imread('image.jpg')# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)# 连通组件分析
_, labels, stats, _ = cv2.connectedComponentsWithStats(binary)

在上述示例中,我们首先使用 cv2.imread() 函数读取图像文件,将图像存储在 image 变量中。

然后,我们根据需要进行灰度化操作,将彩色图像转换为灰度图像。

接下来,我们可以选择使用边缘检测的方法,如 cv2.Canny() 函数,或者使用轮廓检测的方法,如 cv2.findContours() 函数,来获取图像中的文字区域的边缘或轮廓信息。

另外,我们还可以使用连通组件分析的方法,如 cv2.connectedComponentsWithStats() 函数,来获取图像中的文字区域的连通组件信息。

请注意,这些示例代码只是为了演示常见的文字区域检测技术,并不能覆盖所有情况。在实际应用中,你可能需要根据具体需求和图像特点,选择适合的方法和参数,并进行适当的后处理和优化,以获得准确的文字区域。

同时,你还可以结合其他图像处理技术,如形态学操作、角点检测等,来进一步提高文字区域的检测效果。

十一、归纳总结

在这里插入图片描述OpenCV 是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉功能。结合 OCR(Optical Character Recognition)技术,可以实现文字识别的功能。下面是关于 OpenCV 文字识别与 OCR 的一些归纳总结知识点:

  1. 图像预处理:在文字识别之前,通常需要对图像进行预处理,以提高识别准确性。常见的预处理技术包括灰度化、二值化、去噪、图像增强等。OpenCV 提供了丰富的图像处理函数和算法,可以用于这些预处理步骤。

  2. 文字区域检测:确定图像中的文字区域是文字识别的关键步骤。常用的文字区域检测技术包括边缘检测、轮廓检测、连通组件分析等。OpenCV 提供了这些功能的实现方法,可以帮助你找到图像中的文字区域。

  3. OCR 引擎:OCR 引擎是实现文字识别的核心组件。OpenCV 并没有内置 OCR 功能,但可以与其他 OCR 引擎集成,如 Tesseract、OCRopus 等。这些 OCR 引擎提供了强大的文字识别能力,可以识别多种语言和字体的文字。

  4. 文字识别流程:文字识别通常包括图像预处理、文字区域检测和文字识别三个主要步骤。通过使用 OpenCV 进行图像预处理和文字区域检测,再结合 OCR 引擎进行文字识别,可以实现完整的文字识别流程。

  5. 参数调优:在进行文字识别时,需要根据具体情况进行参数调优,以获得最佳的识别效果。例如,在图像预处理中,可以调整灰度化方法、二值化阈值等参数;在文字区域检测中,可以选择合适的边缘检测算法、轮廓检测方法等。

  6. 多语言支持:OCR 引擎通常支持多种语言的文字识别。你可以根据需要选择合适的语言模型和字库,以支持相应语言的识别。

  7. 性能优化:文字识别可能涉及大量的图像处理和计算操作,对计算资源要求较高。为了提高性能,可以采用多线程、GPU 加速等技术手段,以加快文字识别的速度。在这里插入图片描述

这些是关于 OpenCV 文字识别与 OCR 的一些归纳总结知识点。在实际应用中,需要根据具体需求和场景,选择合适的方法和工具,进行适当的参数调优和优化,以获得准确和高效的文字识别结果。

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

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

相关文章

算法沉淀——栈(leetcode真题剖析)

算法沉淀——栈 01.删除字符串中的所有相邻重复项02.比较含退格的字符串03.基本计算器 II04.字符串解码05.验证栈序列 栈(Stack)是一种基于先进后出(Last In, First Out,LIFO)原则的数据结构。栈具有两个主要的操作&am…

【王道数据结构】【chapter5树与二叉树】【P159t12】

设一棵二叉树的结点结构为(LLINK,INFO,RLINK)&#xff0c;ROOT为指向该二叉树根结点的指针&#xff0c;p和q分别为指向该二叉树中任意两个节点的指针&#xff0c;试编写算法ANCESTOR(ROOT,p,q,r)&#xff0c;找到p和q的最近公共祖先结点r #include <iostream> #include &…

re:从0开始的CSS学习之路 9. 盒子水平布局

0. 写在前面 过年也不能停止学习&#xff0c;一停下就难以为继&#xff0c;实属不应 1. 盒子的水平宽度 当一个盒子出现在另一个盒子的内容区时&#xff0c;该盒子的水平宽度“必须”等于父元素内容区的宽度 盒子水平宽度&#xff1a; margin-left border-left padding-lef…

QT 工具栏 状态栏 停靠部件 核心部件

添加/删除工具栏 删除工具栏方法和删除菜单栏方法一样&#xff0c;不过工具栏可以有多个&#xff0c;所以每次右键MainWindow对象&#xff0c;都可以看到添加工具栏的选项。 工具栏添加动作 新添加的QAction对象会在动作编辑器里找到&#xff08;Action Editor&#xff09;&a…

计算机组成原理(1)----主存储器

目录 1.基本半导体元件及原理 2.寻址 1.基本半导体元件及原理 一个主存储器可以分为存储器&#xff0c;MAR&#xff08;地址寄存器&#xff09;和MDR&#xff08;数据寄存器&#xff09;&#xff0c;这三个部件由在时序控制逻辑的控制下工作 其中存储体用来存放二进制数据0和…

[字符串] KMP与字符哈希

KMP 首先&#xff0c;要知道在KMP算法里的 next 数组里&#xff0c;对操作的字符串到底存储了什么。 以当前字符为结尾的子串&#xff0c;真前缀与真后缀相同的最长长度。&#xff08;注意&#xff1a;不是说回文&#xff1b;而且是“真”&#xff0c;也就是说&#xff0c;不…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进&#xff0c;越来越多的中国制造产品开始走向世界舞台。其中&#xff0c;爱可声助听器凭借其卓越的产品质量&#xff0c;成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品&#xff0c;欧美品质则是指产品在设计、生产、质量控制等方面…

基于RBF神经网络的自适应控制器simulink建模与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1自适应控制器 4.2 RBF神经网络模型 5.完整程序 1.程序功能描述 在simulink中&#xff0c;使用S函数编写基于RBF神经网络的自适应控制器&#xff0c;然后实现基于RBF神经网络的自适应控制…

手撕链表OJ

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Vue CLI学习笔记

在看任何开源库的源码之前&#xff0c;必须先了解它有哪些功能&#xff0c;这样才能针对性地分模块阅读源码。 Vue CLI 简介 Vue CLI是Vue.js的官方命令行工具&#xff0c;它是一个基于Vue.js进行快速开发的完整系统。 通过Vue CLI&#xff0c;开发者可以快速搭建和开发Vue.js项…

VC++ 绘制折线学习

win32 有三个绘制折线的函数&#xff1b; Polyline&#xff0c;根据给定点数组绘制折线&#xff1b; PolylineTo&#xff0c;除了绘制也更新当前位置&#xff1b; PolyPolyline&#xff0c;绘制多条折线&#xff0c;第一个参数是点数组&#xff0c;第二个参数是一个数组、指…

HTML快速入门教程

HTML&#xff1a;超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;是通过标签的形式将内容组织起来然后共享到网络之上供其他电脑访问查看。 大家可以思考一下&#xff0c;怎么将自己电脑上的文件或图片共享给其他电脑&#xff1f; 这时候会说通…

.target勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 网络安全威胁如勒索病毒已经成为企业和个人数据安全的重大挑战之一。.target勒索病毒作为其中的一种&#xff0c;以其高度复杂的加密算法和迅速变化的攻击手法备受关注。本文将深入介绍.target勒索病毒的特点&#xff0c;探讨如何有效地恢复被加密的数据文件…

【小记】MacOS Install golang

问题 - command not found: go ➜ brew install golang ➜ go version go version go1.21.7 darwin/arm64写在最后&#xff1a;若本文章对您有帮助&#xff0c;请点个赞啦 ٩(๑•̀ω•́๑)۶

【Visual Studio】使用空格替换制表符

环境 VS版本&#xff1a;VS2013 问题 如何生成空格替换制表符&#xff1f; 步骤 1、菜单 工具->选项&#xff0c;文本编辑器->C/C->制表符&#xff0c;选择【插入空格】。

电容串联额定耐压问题

例如:两个电容器,其中电容C1 200uF,耐压UM1 100V;电容C2 50uF,耐压UM2500V。 &#xff08;1&#xff09;若将两电容串联使用,其等效电容和耐压各是多少? &#xff08;2&#xff09;若将两电容器并联使用,其等效电容和耐压各是多少? 分析&#xff1a; &#xff08;1&…

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…

深度理解实分析:超越公式与算法的学习方法

在数学的学习旅程中&#xff0c;微积分和线性代数为许多学生提供了直观且具体的入门体验。它们通常依赖于明确的公式、算法以及解题步骤&#xff0c;而这些元素往往可以通过记忆和机械练习来掌握。然而&#xff0c;当我们迈入实分析的领域时&#xff0c;我们面临着一种全新的挑…

【蓝桥杯单片机入门记录】认识单片机

目录 单片机硬件平台 单片机的发展过程 单片机开发板 单片机基础知识 电平 数字电路中只有两种电平&#xff1a;高和低 二进制&#xff08;8421码&#xff09; 十六进制 二进制数的逻辑运算 “与” “或” “异或” 标准C与C51 如何学好单片机 端正学习的态度、培…

最详细STM32 启动流程

一、STM32三种启动方式 常规模式&#xff08;主闪存存储器&#xff09;&#xff1a; 这是最常见的启动模式。在此模式下&#xff0c;处理器会执行复位向量表中的复位地址&#xff0c;从而启动芯片。芯片会执行各种初始化操作&#xff0c;包括时钟初始化、外设初始化等&#xff…