11.4OpenCV_图像预处理02

图像滤波

所为图像滤波通过滤波器得到另一个图像

什么是滤波器

在深度学习中,滤波器又称为卷积核,滤波的过程成为卷积

卷积核概念

卷积核大小,一般为奇数,如

  1. 3*3
  2. 5*5
  3. 7*7

为什么卷积核大小是奇数?

原因是:保证 锚点 在中间,防止位置发生偏移的原因

什么是锚点?

卷积核大小的影响

在深度学习中,卷积核越大,看到的信息越多,提取的特征越好,同时计算量越大

图像平滑处理

图像噪声的定义和性质‌‌

图像噪声‌是指存在于图像数据中的不必要的或多余的干扰信息。它妨碍了人们通过视觉器官对接收信息的理解。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”。因此,将图像噪声看成是多维随机过程是合适的,描述噪声的方法可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。

图像噪声的分类

图像噪声可以根据其来源和性质进行分类。主要分为外部噪声和内部噪声。外部噪声是由外部环境因素引起的,如光线变化、电磁干扰等。内部噪声则是由设备本身的因素引起的,如传感器噪声、电路噪声等。

图像噪声的产生原因

图像噪声的产生原因多种多样,主要包括以下几个方面:

  • 传感器和电路产生的噪声‌:扫描仪或数码相机的传感器和电路可能会产生电子噪声,导致图像中出现噪点。
  • 长时间曝光‌:在拍摄夜景时,由于CCD无法处理较慢的快门速度所带来的巨大工作量,导致一些特定的像素失去控制,产生噪点。
  • 格式压缩‌:使用JPEG格式对图像进行压缩时,由于图像数据的处理方式,可能会在边缘位置产生不自然的结合,形成噪点。
  • 感光元件特性‌:感光元件的热稳定性等特性也可能导致噪点的产生。

图像噪声的影响和解决方法

图像噪声的存在严重影响了图像的质量,使得图像中的信息变得模糊和不清晰。为了减少图像中的噪声,可以采取一些专业的图像处理技术,如图像降噪(Image Denoising),通过减少数字图像中的噪声来提高图像的质量。

​ 图像平滑处理的一个例子是减少图像中的噪声。比如,在拍摄夜间照片时,由于光线不足,图像可能出现许多随机噪点。通过应用平滑处理(如高斯模糊),可以降低这些噪点的影响,从而使图像看起来更清晰,细节更突出。这有助于后续的图像分析或特征提取,提升最终结果的准确性

常见的图像平滑处理方法包括高斯滤波、中值滤波和双边滤波。

高斯滤波

高斯滤波是图像处理中常用的一种平滑滤波方法,其主要作用是去除图像中的噪声,并减少图像细节,以实现图像的平滑处理。

高斯滤波的原理是利用高斯函数对图像进行加权平均。在滤波过程中,每个像素的值都会被其周围像素的加权平均值所取代,而这些权重则由高斯分布函数计算得出。通过这种方式,高斯滤波可以有效地减少图像中的噪声,并保留图像的整体特征。

高斯滤波的使用场景包括但不限于:

  1. 去除高斯噪声: 高斯滤波可以有效地去除高斯噪声,因为该滤波器在计算像素值时会对周围像素进行加权平均,从而抑制噪声的影响。
  2. 模糊处理: 由于高斯滤波会平均周围像素的值,因此它也可用于实现图像的模糊处理,例如在某些需求下需要模糊化处理的图像或区域。
  3. 提取大致轮廓: 由于高斯滤波会平滑图像细节,因此在一定程度上可以帮助提取图像的大致轮廓和结构特征。

cv2.GaussianBlur() 是 OpenCV 库中用于图像模糊处理的函数之一。该函数可以对图像进行高斯模糊处理,即在每个像素周围使用高斯核来加权平均计算像素值,从而达到模糊效果。

cv2.GaussianBlur(src, ksize, sigmaX)

  • src:输入图像。
  • ksize:高斯核的大小,通常以元组 (width, height) 的形式指定。
  • sigmaX:高斯核在 x 方向上的标准差。

以下是一个简单的示例代码,演示如何使用 cv2.GaussianBlur() 函数对图像进行高斯模糊处理:

import cv2
img = cv2.imread("images/renwu01.jpeg")
# 定义高斯核大小和标准差
ksize = (9, 9)
sigma = 3# 对图像进行高斯模糊处理
blurred_image = cv2.GaussianBlur(img, ksize, sigma)# 显示原始图像和滤波后的图像cv2.imshow('old Image', img)
cv2.imshow('new Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

双边滤波

双边滤波是图像处理中常用的一种平滑滤波方法,它可以同时平滑图像并保留边缘信息。

传统的线性滤波方法如均值滤波或高斯滤波在平滑图像的同时,可能会模糊或模糊边缘。而双边滤波通过考虑像素点的空间距离和灰度差异,实现了对图像进行平滑的同时,尽量保留图像的边缘细节。

双边滤波的原理是在滤波过程中,不仅考虑像素点与周围像素点之间的空间距离权重,还考虑像素点与周围像素点的灰度差异权重。这样,像素点的最终值将由它的邻域像素根据这两个权重的组合来计算得出,从而平滑图像的同时保留边缘信息。

双边滤波适用于各种类型的图像,特别适合于那些需要平滑处理但仍保留边缘细节的图像,例如人脸识别、图像增强和图像去噪等领域。

cv2.bilateralFilter() 是 OpenCV 库中用于图像滤波处理的函数之一。该函数可以对图像进行双边滤波处理,即在保持边缘清晰的同时,对图像进行平滑处理。

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace) 函数接受四个参数:

  • src:输入图像。
  • d:滤波器的直径,用于指定在每个像素周围考虑的像素邻域大小。一般为正奇数
  • sigmaColor:颜色空间的标准差,用于控制滤波过程中颜色相似性的权重。较大的值意味着更宽松的颜色相似性条件。

  • 大 sigmaColor 值:当 sigmaColor 较大时,颜色差异较大的像素也会被赋予较大的权重,这意味着滤波器会在更大范围内进行平滑处理,导致图像细节的丢失较多。

  • 小 sigmaColor 值:当 sigmaColor 较小时,只有颜色差异较小的像素会被赋予较大的权重,滤波器主要在颜色相似的区域内进行平滑处理,这样可以更好地保留边缘和细节

  • sigmaSpace:坐标空间的标准差,用于控制滤波过程中空间相似性的权重。较大的值意味着更宽松的空间相似性条件。

  • 大 sigmaSpace 值:当 sigmaSpace 较大时,空间上距离较远的像素也会被赋予较大的权重,这意味着滤波器会在更大的空间范围内进行平滑处理,导致图像的局部细节被进一步平滑。

  • 小 sigmaSpace 值:当 sigmaSpace 较小时,只有空间上距离较近的像素会被赋予较大的权重,滤波器主要在局部范围内进行平滑处理,这样可以更好地保留局部细节和边缘信息

以下是一个简单的示例代码,演示如何使用 cv2.bilateralFilter() 函数对图像进行双边滤波处理:

import cv2
img = cv2.imread("images/renwu02.png")
# 定义滤波器参数
d =30
sigmaColor = 100
sigmaSpace = 150# 对图像进行双边滤波处理
filtered_image = cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace)# 显示原始图像和滤波后的图像cv2.imshow('old Image', img)
cv2.imshow('new Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

中值滤波

中值滤波是图像处理中常用的一种平滑滤波方法,其主要作用是去除图像中的胡椒噪声或其他类型的脉冲噪声。

中值滤波的原理是将每个像素点周围的邻域像素按照灰度值大小进行排序,然后取中间值作为该像素点的输出值。因为椒盐噪声或脉冲噪声的灰度值通常远远偏离周围像素的灰度值,通过中值滤波可以有效地将这些异常值去除,从而使图像变得更加平滑。

中值滤波适用于各种类型的图像,特别适合于那些受到椒盐噪声干扰的图像,例如传感器捕获的图像或者在传输过程中受到干扰的图像

cv2.medianBlur()是OpenCV中的一个函数,用于对图像进行中值滤波处理。中值滤波是一种常见的图像处理技术,可用于去除图像中的椒盐噪声或斑点噪声。这个函数的语法如下:

 cv2.medianBlur(src, ksize)

其中:

  • src 是输入的图像。
  • ksize 是用于中值滤波的孔径大小,必须是大于1的奇数,例如3、5、7等。
import cv2
img = cv2.imread("images/hujiao.png")# 对图像进行高斯模糊处理
blurred_image = cv2.medianBlur(img,5)# 显示原始图像和滤波后的图像cv2.imshow('old Image', img)
cv2.imshow('new Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像边缘检测

使用OpenCV进行图像边缘检测的原因有以下几点:

  1. 图像边缘是物体与背景、物体与物体之间的边界,因此边缘检测对于图像分割、特征提取等任务非常重要。
  2. 图像边缘蕴含了丰富的信息,如形状、方向、纹理等,这些信息对于后续的图像处理和分析非常重要。
  3. 通过边缘检测,可以大幅减少数据量,并且剔除可以认为不相关的信息,保留了图像重要的结构属性。
  4. 边缘检测是图像处理和计算机视觉中的一个基本问题,它可以帮助我们标识数字图像中亮度变化明显的点,用于确定图片中物体的边界(边缘)或者区域。

Canny边缘检测

Canny 边缘检测广泛应用于图像处理、计算机视觉和机器学习中的物体识别、图像分割等任务

案例

import cv2# 读取并转换为灰度图
image = cv2.imread("images/car.png")
# 将图像从BGR到灰度图像的转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 应用 Canny 边缘检测
edges = cv2.Canny(image, 50, 80)
# 显示结果
cv2.imshow('边缘检测', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Canny 函数是 OpenCV 中用于边缘检测的重要工具。它实现了 Canny 边缘检测算法,该算法可以有效地提取图像中的边缘。

函数语法

edges = cv2.Canny(image, threshold1, threshold2)

参数

  • image: 输入的灰度图像。
  • threshold1: 第一个阈值,用于边缘检测的低阈值。
  • threshold2: 第二个阈值,用于边缘检测的高阈值。
  1. 低阈值
    • 低阈值用来识别可能的边缘像素。如果一个像素的梯度值大于低阈值,那么这个像素可能会被认为是边缘的一部分。
    • 但是,单独依靠低阈值来识别边缘是不够的,因为它可能会导致很多虚假的边缘被识别出来,特别是那些由于噪声引起的边缘。
  2. 高阈值
    • 高阈值用于识别强烈的边缘像素。如果一个像素的梯度值大于高阈值,那么这个像素几乎可以肯定是边缘的一部分。
    • 高阈值的存在可以有效地减少由于噪声引起的虚假边缘

返回值

  • edges: 返回检测到的边缘图像,边缘部分为白色,其他部分为黑色。

图像形态学操作

在OpenCV中,形态学操作是一类基于形状的图像处理技术,主要用于提取图像中的有用特征,如边界检测、噪声去除等。常见的形态学操作包括腐蚀、膨胀、开运算、闭运算、梯度、顶帽和黑帽等。下面是这些操作的简要介绍和使用方法:

腐蚀

腐蚀操作会减少图像中白色区域的大小,常用于消除小的白色噪声点。腐蚀的基本思想是,如果一个结构元素完全包含在前景物体内部,则该结构元素对应的输出图像位置的值为1,否则为0。

import cv2
import numpy as np# 读取图像
img = cv2.imread("images/ceshi02.jpg")
# 定义结构元素
kernel = np.ones((3, 3), np.uint8)
# 执行腐蚀操作
eroded = cv2.erode(img, kernel, iterations=3)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

函数:

eroded = cv2.erode(src, kernel, dst,iterations=1)

参数说明

  • src: 输入图像。
  • kernel: 结构元素,用于定义腐蚀操作的方式。是一个矩阵结构数据
  • dst (可选): 输出图像。如果未提供,则会自动创建一个新的图像。
  • iterations (可选): 腐蚀操作的迭代次数,默认为1

迭代次数的影响

  • 迭代次数iterations 参数控制腐蚀操作的迭代次数。增加迭代次数会使腐蚀效果更加明显,但也会导致前景物体变得更小

膨胀

膨胀操作与腐蚀相反,它会增加图像中白色区域的大小,常用于填补前景物体中的小洞或扩大前景物体的边界。

import cv2
import numpy as np# 读取图像
img = cv2.imread("images/ceshi01.jpeg")
# 定义结构元素
kernel = np.ones((5, 5), np.uint8)
# 执行腐蚀操作
eroded = cv2.dilate(img, kernel, iterations=3)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

函数:

dilated = cv2.dilate(src, kernel, iterations=1)

参数说明

  • src: 输入图像。
  • kernel: 结构元素,用于定义腐蚀操作的方式。是一个矩阵结构数据
  • dst (可选): 输出图像。如果未提供,则会自动创建一个新的图像。
  • iterations (可选): 迭代操作的迭代次数,默认为1

开运算

开运算是先腐蚀后膨胀的过程,常用于去除小的物体、平滑较大的物体边界以及填充细长的突出部分。

import cv2
import numpy as np# 读取图像
img = cv2.imread("images/kai.jpg")
# 定义结构元素
kernel = np.ones((7, 7), np.uint8)
# 执行腐蚀操作
eroded = cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

函数:

opened = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel)

参数说明

  • src: 输入图像。

  • op
    形态学操作的类型,可以是以下几种之一:
    • cv2.MORPH_OPEN:开运算
    • cv2.MORPH_CLOSE:闭运算
    • cv2.MORPH_GRADIENT:形态学梯度
    • cv2.MORPH_TOPHAT:顶帽
    • cv2.MORPH_BLACKHAT:黑帽
  • kernel: 结构元素,用于定义形态学操作的方式。可以通过 cv2.getStructuringElement 函数获得

闭运算

闭运算是先膨胀后腐蚀的过程,常用于填充前景物体中的小洞,平滑较大物体的边界以及连接邻近的物体。

import cv2
import numpy as np# 读取图像
img = cv2.imread("images/bi01.jpeg")
# 定义结构元素
kernel = np.ones((17, 17), np.uint8)
# 执行腐蚀操作
eroded = cv2.morphologyEx(img, cv2.MORPH_CLOSE,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

函数:

closed = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel)

形态学梯度

形态学梯度是通过计算膨胀后的图像与腐蚀后的图像之间的差值来得到的,可以突出物体的边缘。

形态学梯度= 原图-腐蚀的图

函数:

gradient = cv2.morphologyEx(src, cv2.MORPH_GRADIENT, kernel)
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/xtx.gif")
# 定义结构元素
kernel = np.ones((9, 9), np.uint8)
# 执行腐蚀操作
eroded = cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

顶帽

顶帽变换是原图像与开运算结果的差值,用于获取图像中的亮细节。

顶帽: 原图减去开运算,得到大图形外的小图形

函数:

tophat = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/kai.jpg")
# 定义结构元素
kernel = np.ones((7, 7), np.uint8)
# 执行腐蚀操作
eroded = cv2.morphologyEx(img, cv2.MORPH_TOPHAT,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

黑帽

黑帽变换是闭运算结果与原图像的差值,用于获取图像中的暗细节。

黑帽:原图减去闭运算,得到大图形内的小图形

函数:

blackhat = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/bi01.jpeg")
# 定义结构元素
kernel = np.ones((7, 7), np.uint8)
# 执行黑帽操作
eroded = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT,kernel)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Eroded Image', eroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相关文章

基于LabVIEW应用ARINC 429板卡实现数据通讯——(下篇)

五、基于LabVIEW实现数据通讯 基于LabVIEW实现429板卡的数据通讯是调用API 动态链接库文件来实现的。该文件中有许多的板卡操作函数,在调用板卡中必须按照一定的函数调用流程来操作板卡,否则极易出现板卡操作错误。 1、API函数的调用步骤 API函数的调…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时,默认显示“Generate Signed APK”提示信息,如下图所示: 如果在打包时不显示“Generate Signed APK”提示信息,解决办法是: Android Studio菜单栏,“File->Settings->Appearan…

典型的列转行(sparkSQL)

数据 id,username,math,computer,english 1,huangbo,34,58,58 2,xuzheng,45,87,45 3,wangbaoqiang,76,34,89 编写 SQL,将其转换为下面这张表 id,username,course,score 1,huangbo,math,34 1,huangbo,computer,58 1,huangbo,english,58 2,xuzheng,math,45 2,xuzheng,…

42python数据分析numpy基础之trace计算对角线元素的和

python的numpy库的trace()函数,计算对角线元素的和。 用法 numpy.trace(a, offset0, axis10, axis21, dtypeNone, outNone)描述 numpy.trace(a),返回数组a的对角线元素的和。 入参 a:必选,数组,列表,元…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…

深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升

目录 深度测评 ONLYOFFICE 文档 8.2 版本:革新与体验的双重提升引言协作编辑功能的革新PDF 表单签名的创新界面设计的全面提升性能与稳定性的双重优化文档编辑器的新功能电子表格的强大新特性演示文稿的创意增强RTL 支持与本地化的关注更多实用改进用户体验的持续提…

CytoSPACE·单细胞与空间转录组的高精度对齐

CytoSPACE 是一种新型计算工具,用于将单细胞转录组分配到原位空间转录组学 (ST) 数据。该方法通过最短增强路径优化程序最小化基于相关性的成本函数来解决单细胞/点分配问题。 工作流程: 1. 应用现有的ST去卷积方法(如Spatial Seurat或RCTD&…

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式,在…

Chrome 130 版本开发者工具(DevTools)更新内容

Chrome 130 版本开发者工具(DevTools)更新内容 一、网络(Network)面板更新 1. 重新定义网络过滤器 网络面板获新增了一些过滤条件,这些过滤条件是根据反馈重新设计的,特定于类型的过滤条件保持不变&…

扑克牌[CSP-J 2024]

题目传送 可以用map做成一个桶&#xff0c;它的size就是输入的种数&#xff0c;再用52-size就好了。 代码如下&#xff1a; #include<iostream> #include<map> using namespace std; typedef long long ll; int main() {map<string,int> b;int n;cin>&g…

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

文章目录 Spring 是什么什么是容器什么是 IoCIoC 介绍传统程序开发解决方法IoC 程序开发IoC 的优势 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 https://www.captainbed.cn/yechiel 在…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据&#xff0c;从而使CPU去完成更重要的任务&#xff0c;不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。上层划分了4个卷&#xff0c;采用VMFS文件系统&#xff0c;存放虚拟机文件。 服务器存储故障&#xff1a; 存储RAID5阵列中磁盘出现故障&#xff0c;有2块硬盘对应的指示灯亮黄灯…

深度学习之学习率

1 学习率 1.1 学习率的作用 ​ 在机器学习中&#xff0c;监督式学习通过定义一个模型&#xff0c;并根据训练集上的数据估计最优参数。梯度下降法是一个广泛被用来最小化模型误差的参数优化算法。梯度下降法通过多次迭代&#xff0c;并在每一步中最小化成本函数&#xff08;c…

HashMap 源码分析

HashMap 源码分析 1. 前置知识 1.1 什么是 Map 在实际需求中&#xff0c;我们常常会遇到这样的问题&#xff1a;在诸多数据中&#xff0c;通过其编号来寻找某些信息&#xff0c;从而进行查看或修改&#xff0c;例如通过学号查询学生信息。今天我们所介绍的 Map 集合就可以很…

Python毕业设计选题:基于django+vue的4S店客户管理系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 员工信息管理 个人中心 车辆信息管理 售后服务管理 售后安排管理 车辆信…

Vagrant使用教程:创建CentOS 8虚拟机

目录 简介准备工作下载配置Vagrant修改环境变量创建VAGRANT_HOME环境变量修改virturalBox新建虚拟机文件的默认生成路径修改Vagrant配置支持VirtualBox7.1.x版本创建Vagrant文件添加镜像 初始化并开机初始化开发环境开机 其他配置项宿主机的交换目录修改虚拟机内存修改 访问方式…

2024/11/4 数据结构大题打卡

邻接矩阵定义&#xff1a; typedef struct{char vex[N];int weight[N][N];int vexnum,arcnum; }MGraph; 邻接链表定义&#xff1a; #difine N 8typedef struct ArcNode{int vexIndex;int weight;struct ArcNode *next; }ArcNode; typedef struct VNode{char data;ArcNode *…

能详细的说明单片机的原理及其设计方法吗?如何快速的学会单片机这门技术?

单片机&#xff08;Microcontroller Unit&#xff0c;简称 MCU&#xff09;是一种将中央处理器&#xff08;CPU&#xff09;、存储器、输入输出接口等集成在一块芯片上的微型计算机系统。 **单片机的工作原理**&#xff1a; 单片机通过内部的时钟信号来同步各个部件的工作。程…

第一篇 硬件篇1[学习-来自 正点原子]

在电路设计中&#xff0c;TVS&#xff08;瞬态电压抑制器&#xff09;是一种有效的保护元件&#xff0c;可以用来防止瞬时过电压对芯片和其他敏感器件造成损坏。 STM32F103RCT6作为MCU 一键下载电路的具体实现过程&#xff1a; 首先&#xff0c; mcuisp控制 DTR输出低电平&…