OpenCV车牌识别技术详解

第一部分:图像预处理

车牌识别(License Plate Recognition,LPR)是计算机视觉领域的一个重要应用,它涉及到图像处理、模式识别等多个方面。OpenCV作为一个强大的计算机视觉库,提供了丰富的车牌识别相关功能。本文将详细介绍OpenCV中的车牌识别技术,包括图像预处理、车牌定位、字符分割和字符识别等,并配合Python代码示例来演示如何实现这些功能。

1.1 图像读取与显示

在车牌识别中,首先需要读取和显示车牌图像。OpenCV提供了cv2.imread()函数来读取图像,并使用cv2.imshow()函数来显示图像。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 显示图像
cv2.imshow('Car Plate', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.imread()函数读取图像,返回一个NumPy数组。
  • cv2.imshow()函数在窗口中显示图像。
  • cv2.waitKey(0)函数等待按键事件,cv2.destroyAllWindows()函数用于关闭所有OpenCV创建的窗口。

1.2 图像灰度化

车牌识别中,通常需要将彩色图像转换为灰度图像,以减少计算量和提高识别的准确性。OpenCV提供了cv2.cvtColor()函数来实现图像的灰度化。

# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 显示灰度图像
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.cvtColor()函数接受一个图像数组和一个表示源颜色空间和目标颜色空间的标志,返回一个灰度图像数组。

1.3 图像二值化

二值化是将图像转换为黑白图像的过程,其中白色区域代表感兴趣的区域,黑色区域代表背景。OpenCV提供了cv2.threshold()函数来实现图像的二值化。

# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 显示二值图像
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.threshold()函数接受一个图像数组、阈值和最大值,以及一个表示阈值类型的标志,返回一个二值图像数组。

1.4 图像形态学操作

形态学操作是一种基于数学形态学的图像处理方法,包括膨胀、腐蚀、开运算和闭运算等。OpenCV提供了cv2.erode()cv2.dilate()cv2.morphologyEx()等函数来实现形态学操作。

# 创建一个膨胀核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 应用膨胀操作
dilated_image = cv2.dilate(binary_image, kernel, iterations=1)# 显示膨胀后的图像
cv2.imshow('Dilated Image', dilated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.getStructuringElement()函数创建一个结构元素,用于形态学操作。
  • cv2.dilate()函数应用膨胀操作,扩大感兴趣区域。

1.5 图像轮廓提取

轮廓提取是图像分析中的一个重要步骤,特别是在车牌识别中,它可以帮助我们识别出车牌的边界。OpenCV提供了cv2.findContours()函数来提取图像的轮廓。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 应用形态学操作(例如,开运算)以增强轮廓
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(binary_image, cv2.MORPH_OPEN, kernel)# 提取轮廓
contours, _ = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制轮廓
for contour in contours:cv2.drawContours(image, contours, -1, (0, 255, 0), 2)# 显示结果
cv2.imshow('Car Plate with Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.getStructuringElement()函数创建一个结构元素,用于形态学操作。
  • cv2.morphologyEx()函数应用形态学操作,如开运算,以增强轮廓。
  • cv2.findContours()函数接受一个二值图像数组和一个轮廓检索模式,返回一个轮廓列表和一个轮廓层次结构。
  • cv2.drawContours()函数在原始图像上绘制轮廓。

1.6 车牌定位

车牌定位是车牌识别系统中的第一步,它的目标是找到车牌在图像中的位置。OpenCV提供了多种方法来实现车牌定位,包括基于边缘检测的方法和基于颜色分割的方法。

# 假设我们已经提取了车牌的轮廓
# contours = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 假设我们已经有了一个车牌轮廓
contour = np.array([[100, 100], [200, 100], [200, 200], [100, 200]])# 计算轮廓的包围盒
x, y, w, h = cv2.boundingRect(contour)# 绘制车牌位置
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)# 显示结果
cv2.imshow('Car Plate Position', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.boundingRect()函数计算轮廓的包围盒,返回左上角坐标和宽高。
  • cv2.rectangle()函数在原始图像上绘制车牌位置的矩形框。

总结

本节介绍了OpenCV中的图像预处理技术,包括图像读取与显示、图像灰度化、图像二值化、图像形态学操作和图像轮廓提取。通过Python代码示例,展示了如何使用这些功能来处理车牌图像,为后续的车牌定位和字符分割做好准备。这些预处理步骤是车牌识别系统中不可或缺的部分,它们有助于提高识别的准确性和效率。后续文章将继续介绍OpenCV的其他功能模块和技术原理。

第二部分:车牌定位

车牌定位是车牌识别系统中的第一步,它的目标是找到车牌在图像中的位置。OpenCV提供了多种方法来实现车牌定位,包括基于边缘检测的方法和基于颜色分割的方法。本节将详细介绍这些方法及其背后的技术原理。

2.1 基于边缘检测的方法

边缘检测是计算机视觉中的一种基本技术,它旨在检测图像中亮度变化明显的点。OpenCV提供了多种边缘检测算法,如Sobel、Canny等。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用Canny边缘检测
edges = cv2.Canny(gray_image, 100, 200)# 显示边缘检测结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.Canny()函数实现Canny边缘检测算法,它是一种多阶段算法,用于消除噪声并精确地找到边缘。

2.2 基于颜色分割的方法

颜色分割是根据图像的颜色信息来分割图像的一种方法。OpenCV提供了cv2.inRange()函数来实现颜色分割。

import cv2.cv2 as cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为HSV格式
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 定义颜色范围
lower_blue = np.array([90, 50, 50])
upper_blue = np.array([130, 255, 255])# 应用颜色分割
blue_mask = cv2.inRange(hsv_image, lower_blue, upper_blue)# 显示颜色分割结果
cv2.imshow('Blue Mask', blue_mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.inRange()函数根据指定的颜色范围,创建一个二值图像,其中在颜色范围内的像素值为255,其余像素值为0。

2.3 车牌定位技术的应用

车牌定位技术在人脸识别系统中具有广泛的应用,例如交通监控、违章检测等。通过准确快速地定位车牌位置,可以进一步进行车牌字符分割和识别等高级处理。

总结

本节介绍了OpenCV中的车牌定位技术,包括基于边缘检测的方法和基于颜色分割的方法。通过Python代码示例,展示了如何使用这些方法来定位车牌在图像中的位置。车牌定位是人脸识别系统中的关键步骤,为后续的字符分割和识别提供了重要的支持。后续文章将继续介绍OpenCV的其他功能模块和技术原理。

第三部分:字符分割

字符分割是将车牌图像中的字符区域从背景中分离出来,以便进行字符识别。OpenCV提供了多种字符分割方法,包括基于边缘检测的方法、基于连通域的方法和基于形态学的方法。本节将详细介绍这些方法及其背后的技术原理。

3.1 基于边缘检测的方法

在车牌识别中,字符通常具有清晰的边缘,可以使用边缘检测方法来分割字符区域。OpenCV提供了多种边缘检测算法,如Sobel、Canny等。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用Canny边缘检测
edges = cv2.Canny(gray_image, 100, 250)# 显示边缘检测结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.Canny()函数实现Canny边缘检测算法,它是一种多阶段算法,用于消除噪声并精确地找到边缘。

3.2 基于连通域的方法

连通域是指图像中具有相同像素值的相邻像素点的集合。OpenCV提供了cv2.connectedComponentsWithStats()函数来检测图像中的连通域。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 检测连通域
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_image, connectivity=8)# 显示连通域统计信息
for i in range(1, num_labels):x, y, w, h = stats[i]cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)# 显示结果
cv2.imshow('Connected Components', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.connectedComponentsWithStats()函数检测图像中的连通域,并返回连通域的数量、标签、边界框统计信息等。

3.3 基于形态学的方法

形态学方法是一种基于数学形态学的图像处理方法,包括膨胀、腐蚀、开运算和闭运算等。OpenCV提供了cv2.morphologyEx()函数来实现形态学操作。

import cv2.cv2 as cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 创建一个结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 应用开运算
opening = cv2.morphologyEx(binary_image, cv2.MORPH_OPEN, kernel)# 显示开运算结果
cv2.imshow('Opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.morphologyEx()函数应用形态学操作,如开运算,以分割字符区域。

3.4 字符分割技术的应用

字符分割技术在人脸识别系统中具有广泛的应用,例如交通监控、违章检测等。通过准确快速地分割字符区域,可以进行字符识别、车牌识别等高级处理。

3.5 基于边缘检测的连通域分析

在实际应用中,我们通常会结合使用边缘检测和连通域分析来更准确地分割字符区域。通过边缘检测,我们可以得到字符的大致轮廓,然后使用连通域分析来进一步细化这些轮廓。

import cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用Canny边缘检测
edges = cv2.Canny(gray_image, 100, 250)# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 检测连通域
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_image, connectivity=8)# 显示连通域统计信息
for i in range(1, num_labels):x, y, w, h = stats[i]cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)# 显示结果
cv2.imshow('Connected Components', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.connectedComponentsWithStats()函数结合了边缘检测和连通域分析,它返回连通域的数量、标签、边界框统计信息等。

3.6 基于形态学的连通域细化

在使用连通域分析之后,我们可能需要进一步细化连通域的边界,以提高字符分割的准确性。OpenCV的形态学操作可以用来细化连通域的边界。

import cv2.cv2 as cv2
import numpy as np# 读取图像
image = cv2.imread('car_plate.jpg')# 转换图像为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用阈值化
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 创建一个结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))# 应用开运算
opening = cv2.morphologyEx(binary_image, cv2.MORPH_OPEN, kernel)# 显示开运算结果
cv2.imshow('Opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.morphologyEx()函数应用形态学操作,如开运算,以细化连通域的边界。

总结

本节介绍了OpenCV中的字符分割技术,包括基于边缘检测的方法、基于连通域的方法和基于形态学的方法。通过Python代码示例,展示了如何使用这些方法来分割车牌图像中的字符区域。字符分割是人脸识别系统中的关键步骤,为后续的字符识别和车牌识别提供了重要的支持。后续文章将继续介绍OpenCV的其他功能模块和技术原理。

第四部分:字符识别

字符识别是人脸识别系统中的最后一步,它的目标是识别出车牌图像中的字符。OpenCV提供了多种字符识别方法,包括基于特征的方法和基于深度学习的方法。本节将详细介绍这些方法及其背后的技术原理。

4.1 基于特征的方法

基于特征的方法是通过提取图像的特征来识别字符。常见的特征包括SIFT、SURF和ORB等。

import cv2
import numpy as np# 读取字符图像
character_image = cv2.imread('character.jpg')# 创建SIFT对象
sift = cv2.SIFT_create()# 检测关键点和计算描述子
kp, des = sift.detectAndCompute(character_image, None)# 显示关键点和描述子
cv2.imshow('Keypoints', cv2.drawKeypoints(character_image, kp, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS))
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.SIFT_create()函数创建一个SIFT对象。
  • sift.detectAndCompute()函数在字符图像上检测关键点并计算描述子。
  • cv2.drawKeypoints()函数用于绘制关键点。

4.2 基于深度学习的方法

深度学习方法是一种强大的机器学习技术,它可以处理复杂的特征表示。OpenCV提供了多种深度学习模型,如Haar级联分类器、LBP级联分类器和深度学习模型。

import cv2
import numpy as np# 加载预训练的深度学习模型
model = cv2.dnn.readNetFromTensorflow('character_recognition_model.pb')# 预处理图像
blob = cv2.dnn.blobFromImage(character_image, 1.0, (227, 227), (104.0, 177.0, 123.0), swapRB=True, crop=False)# 设置模型的输入
model.setInput(blob)# 进行预测
prediction = model.forward()# 打印预测结果
print('Predicted Character:', prediction)
  • cv2.dnn.readNetFromTensorflow()函数加载预训练的深度学习模型。
  • cv2.dnn.blobFromImage()函数将图像预处理为模型所需的格式。
  • model.setInput()函数设置模型的输入。
  • model.forward()函数进行预测。

总结

本节介绍了OpenCV中的字符识别技术,包括基于特征的方法和基于深度学习的方法。通过Python代码示例,展示了如何使用这些方法来识别车牌图像中的字符。字符识别是人脸识别系统中的最后一步,通过准确识别出字符,我们可以得到完整的车牌信息。后续文章将继续介绍OpenCV的其他功能模块和技术原理。

第五部分:车牌识别系统的集成与优化

在完成了图像预处理、车牌定位、字符分割和字符识别之后,我们需要将这些步骤集成到一个完整的车牌识别系统中,并进行优化以提高系统的性能。本节将介绍如何将这些步骤集成到一个Python脚本中,并讨论一些优化的策略。

5.1 集成车牌识别系统

集成车牌识别系统意味着将所有的步骤(图像预处理、车牌定位、字符分割和字符识别)组合在一起,形成一个完整的流程。

import cv2
import numpy as npdef recognize_license_plate(image_path):# 读取图像image = cv2.imread(image_path)# 图像预处理gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)# 车牌定位# 假设我们已经有了一个车牌轮廓contour = np.array([[100, 100], [200, 100], [200, 200], [100, 200]])x, y, w, h = cv2.boundingRect(contour)# 字符分割# 假设我们已经有了一个分割的字符区域characters = [cv2.imread('character1.jpg'), cv2.imread('character2.jpg'), cv2.imread('character3.jpg')]# 字符识别# 假设我们已经有了一个字符识别模型model = cv2.dnn.readNetFromTensorflow('character_recognition_model.pb')for i, character in enumerate(characters):blob = cv2.dnn.blobFromImage(character, 1.0, (227, 227), (104.0, 177.0, 123.0), swapRB=True, crop=False)model.setInput(blob)prediction = model.forward()print(f'Character {i+1}: {prediction}')# 使用车牌识别系统
image_path = 'car_plate.jpg'
recognize_license_plate(image_path)
  • recognize_license_plate函数接受一个图像路径,并执行车牌识别的完整流程。
  • cv2.imread()函数读取图像。
  • cv2.cvtColor()函数转换图像颜色空间。
  • cv2.threshold()函数应用阈值化。
  • cv2.boundingRect()函数计算轮廓的包围盒。
  • cv2.dnn.blobFromImage()函数将图像预处理为模型所需的格式。
  • cv2.dnn.readNetFromTensorflow()函数加载预训练的深度学习模型。

5.2 系统优化策略

为了提高车牌识别系统的性能,我们可以采取以下优化策略:

  1. 特征选择:选择最有效的特征,如SIFT、SURF或ORB,以提高字符识别的准确性。
  2. 模型训练:使用大量标注数据对深度学习模型进行训练,以提高模型对各种车牌字符的识别能力。
  3. 实时处理:优化图像预处理和字符识别的步骤,以提高整个系统的处理速度。
  4. 错误处理:添加错误处理机制,以处理可能出现的识别错误,例如字符识别不准确或车牌定位失败。

总结

本节介绍了如何将OpenCV中的车牌识别技术集成到一个完整的系统中,并讨论了一些优化策略以提高系统的性能。通过这些步骤,我们可以构建一个高效、准确的车牌识别系统,用于各种实际应用,如交通监控、违章检测等。后续文章将继续介绍OpenCV的其他功能模块和技术原理,以帮助读者更深入地理解和应用计算机视觉技术。

总结

在本系列的OpenCV车牌识别技术详解中,我们深入探讨了OpenCV在人脸识别领域的功能和技术。从图像预处理、车牌定位、字符分割到字符识别,我们通过Python代码示例展示了如何使用OpenCV库来实现这些功能。

  • 图像预处理:我们介绍了如何读取和显示图像,以及如何将图像转换为灰度图像、二值图像,应用形态学操作和提取轮廓。
  • 车牌定位:我们探讨了基于边缘检测和颜色分割的方法,以及如何使用连通域分析和形态学方法来更准确地定位车牌位置。
  • 字符分割:我们介绍了基于边缘检测、连通域分析和形态学的方法,以及如何结合使用这些方法来分割字符区域。
  • 字符识别:我们介绍了基于特征的方法和基于深度学习的方法,以及如何使用这些方法来识别车牌图像中的字符。
  • 系统集成与优化:我们介绍了如何将所有的步骤集成到一个完整的车牌识别系统中,并讨论了一些优化的策略以提高系统的性能。

通过这些技术和策略,OpenCV可以帮助我们构建高效、准确的车牌识别系统。这些技术在交通监控、违章检测等应用中有着广泛的应用。随着计算机视觉技术的不断发展,OpenCV将继续提供更多强大的功能,以满足不断增长的应用需求。后续文章将继续介绍OpenCV的其他功能模块和技术原理,帮助读者更好地理解和应用计算机视觉技术。

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

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

相关文章

Origin制作线性拟合回归图

选中数据,点下方散点图 调整散点颜色 在分析中打开线性拟合回归 添加文本 显示上轴

【NPU 系列专栏 1.1 -- NPU TOPS 算力的计算方式】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 NPU 算力MAC 阵列简介MAC 阵列特点 MAC 阵列的结构MAC 阵列架构示例 MAC 阵列计算举例示例计算 TOPS 计算方法 NPU 算力 OpenCV 算法会消耗很大一部分自动驾驶芯片的算力,在车上堆摄像头的同时也需要堆TOPS&#xf…

卷积神经网络(二)-AlexNet

前言: AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优…

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言,其特性包括:模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法,以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

prompt面试三道题

关于“prompt”(在AI、自然语言处理或用户交互等领域中,通常指的是引导用户输入或系统响应的文本或指令)的面试题,可以从不同角度和难度级别来设计。以下是由简单到困难的三道面试题: 1. 简单题 题目:请解…

【面试题】:MySQL `EXPLAIN`执行计划字段解析

MySQL EXPLAIN执行计划字段解析 引言 在MySQL中,EXPLAIN是一个强大的工具,用于分析查询语句的执行计划。通过EXPLAIN,你可以了解MySQL如何执行你的查询,包括它如何连接表、使用索引以及表的访问顺序等。了解这些信息对于优化查询…

四、GD32 MCU 常见外设介绍(9)9.FWDG 模块介绍

9.1.FWDG 简介 本章我们主要分析独立看门狗(FWDG)的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即FWDGTRSTF。如果…

基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…

Java基础巩固——JDK 8、9新增接口的特性(接口中定义非抽象方法、静态方法和私有方法)

#Java学了这么久,项目也做了?基础知识还不巩固?快来关注我的这篇系列博客——Java基础复习巩固吧# 目录 引言 一、JDK8新特性:允许在接口中定义非抽象方法和静态方法。 注意事项 二、JDK9新特性:允许在接口中定义p…

ScriptableObject使用

资料 Scripting/Create modular game architecture in Unity with ScriptableObjects 脚本文档 基础 SO是一个Unity对象,继承UnityEngine.Objec, SO最大的特点是实例文件可共享,有点类似静态数据,同一个实例文件可被多个对象引…

matlab实验:实验六MATLAB 数值计算与符号运算

题目1:(线性方程组数值求解) 1. 用不同的方法求解下面方程:(方程原式参考 P369 实验 10,第 1 题) 第 1 种,左除和求逆函数(inv) 第 2 种 , 用 符 号 运 算 的…

JAVA基础知识4(static、继承)

JAVA基础知识4 static静态成员变量静态成员方法解释注意点 继承父类(基类或超类)子类(派生类)使用继承的示例解释运行结果 成员变量的访问特点成员方法的访问特点构造方法的访问特点 Java项目,包和类之间的联系包的概念…

vue elementui 在table里使用el-switch

<el-table-columnprop"operationStatus"label"状态"header-align"center"align"center"><template slot-scope"scope"><el-switch active-value"ENABLE" inactive-value"DISABLE" v-mod…

使用框架构建React Native应用程序的最佳实践

在React Conf上&#xff0c;我们更新了关于开始构建React Native应用程序的最佳工具的指导&#xff1a;一个React Native框架——一个包含所有必要API的工具箱&#xff0c;让您能够构建生产就绪的应用程序。 现在推荐使用React Native框架&#xff08;如Expo&#xff09;来创建…

Spring 依赖注入02

文章目录 1. 核心概念2. 依赖注入的方式3. 构造函数注入3.1 构造函数注入的优点包括&#xff1a; 4. 设值注入4.1 设值注入的特点和优点4.2 使用设值注入的注意事项 5. 接口注入5.1 接口注入的基本概念&#xff1a;5.2 使用接口注入的注意事项&#xff1a; 依赖注入&#xff08…

代码随想录day23 ||39组合总和1 40组合总和2 131分割回文串

39组合总和1 力扣题目链接 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…

【C语言】两个数组比较详解

目录 C语言中两个数组比较详解1. 逐元素比较1.1 示例代码1.2 输出结果1.3 分析 2. 内置函数的使用2.1 示例代码2.2 输出结果2.3 分析 3. 在嵌入式系统中的应用3.1 示例代码3.2 输出结果3.3 分析 4. 拓展技巧4.1 使用指针优化比较4.2 输出结果4.3 分析 5. 表格总结6. 结论7. 结束…

高级及架构师高频应用型面试题

一、微服务多节点批量应该怎么设计&#xff1f; 1、异步任务分类&#xff1a; 周期性定时任务调度任务批量任务 2、需要考虑并解决的问题&#xff1a; 2.1、避免同一任务同时被多个节点捞取。 1&#xff09;数据库的行级锁 2&#xff09;redis分布式锁 3&#xff09;quartz…