opencv图像处理技术(阈值处理与图像平滑)

进行图像处理时,常常需要对图像进行预处理以提取所需的信息或改善图像质量。阈值处理和图像平滑是两种常见的预处理技术。

阈值处理

阈值处理是一种图像分割技术,其基本思想是将图像中的像素值与一个或多个预先设定的阈值进行比较,根据比较结果将像素分为不同的类别,通常是目标和背景。主要包括二值化、自适应阈值处理等方法。

  • 二值化:将图像像素值转换为两个值之一(通常是0或255),使图像呈现出明显的目标和背景。
  • 自适应阈值处理:根据图像局部特性调整阈值,从而在不同区域获得更好的分割效果。

图像平滑

图像平滑是一种用于去除图像中噪声或细节的技术,其主要目的是使图像变得更加平滑或模糊,以减少噪声对后续处理步骤的影响。常见的图像平滑方法包括均值滤波、高斯滤波、中值滤波等。

  • 均值滤波:将图像中每个像素的值替换为其周围邻域像素值的平均值,用于平滑图像并减少噪声。
  • 高斯滤波:在均值滤波的基础上,考虑了像素之间的权重,使得离中心像素越近的像素具有更高的权重,从而更加自然地模拟图像的模糊效果。
  • 中值滤波:将图像中每个像素的值替换为其周围邻域像素值的中值,对于去除椒盐噪声等斑点噪声效果较好。

任务1 阈值处理基础:

1简单阈值法

简单阈值处理是阈值处理的一种基本形式,它将图像中的像素值与一个固定的阈值进行比较,并根据比较结果将像素值分为两类。以下是简单阈值处理的基本步骤:

  1. 读取图像: 首先,需要读取待处理的图像。

  2. 设定阈值: 简单阈值处理需要设定一个固定的阈值,用来将像素值分为两类,通常为目标和背景。例如,当阈值设定为128时,大于128的像素值被设为一个值(通常为255),小于等于128的像素值被设为另一个值(通常为0)。

  3. 进行阈值处理: 使用设定的阈值对图像进行处理,将像素值分为两类。

  4. 显示处理后的图像: 最后,显示处理后的图像,观察分割效果。

代码:

import cv2
import numpy as np# 读取彩色图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg", cv2.IMREAD_COLOR)# 将彩色图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 应用简单阈值处理
ret, thresh1 = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)# 显示图像
cv2.imshow('原始图像', img)
cv2.imshow('灰度图像', gray)
cv2.imshow('二值化图像', thresh1)cv2.waitKey(0)
cv2.destroyAllWindows()

结果如图: 

2 0tsu阈值处理

Otsu 阈值处理是一种自动确定阈值的方法,它可以根据图像的灰度直方图自动选择最佳阈值,从而进行图像分割。

代码:

import cv2# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 应用Otsu阈值处理
ret, otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 显示原始灰度图像和Otsu二值化图像
cv2.imshow('原始灰度图像', gray)
cv2.imshow('Otsu二值化图像', otsu)cv2.waitKey(0)
cv2.destroyAllWindows()

结果如图:

3自适应阈值处理

自适应阈值处理是一种根据图像局部特性动态调整阈值的方法,适用于图像局部光照变化较大或者全局阈值不适用的情况。与简单阈值处理不同,自适应阈值处理不使用固定的阈值,而是根据图像的局部区域计算每个像素的阈值。

代码:

import cv2# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用均值自适应阈值处理
# cv2.adaptiveThreshold() 函数参数说明:
# gray:输入的灰度图像
# 255:目标像素的最大值
# cv2.ADAPTIVE_THRESH_MEAN_C:使用均值作为阈值计算方式
# cv2.THRESH_BINARY:二值化类型,将大于阈值的像素设置为255,小于阈值的像素设置为0
# 7:块大小,表示在块内计算局部阈值时所使用的像素邻域大小
# 5:从计算的均值或加权均值中减去的常数,用于调整阈值大小
athdMEAN = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 7, 5)# 使用高斯加权自适应阈值处理
# cv2.adaptiveThreshold() 函数参数说明:
# gray:输入的灰度图像
# 255:目标像素的最大值
# cv2.ADAPTIVE_THRESH_GAUSSIAN_C:使用高斯加权均值作为阈值计算方式
# cv2.THRESH_BINARY:二值化类型,将大于阈值的像素设置为255,小于阈值的像素设置为0
# 5:块大小,表示在块内计算局部阈值时所使用的像素邻域大小
# 3:从计算的均值或加权均值中减去的常数,用于调整阈值大小
athdGAUS = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 3)# 显示均值自适应阈值处理结果和高斯加权自适应阈值处理结果
cv2.imshow('均值自适应阈值处理', athdMEAN)
cv2.imshow('高斯加权自适应阈值处理', athdGAUS)cv2.waitKey(0)
cv2.destroyAllWindows()

结果如图:

 任务2:使用滑动条调整阈值

使用滑动条调整阈值是一种交互式调整图像处理参数的方法,对于调试和优化图像处理算法非常有用。在OpenCV中,可以使用cv2.createTrackbar()函数创建滑动条,并为其指定回调函数,以便在滑动条值发生变化时执行相应的操作。

代码:

import cv2
import numpy as np# 定义一个空函数,用作滑动条回调函数
def nothing(x):pass# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 定义窗口名称
windowName = "dcz_Thresholding"# 创建一个窗口
cv2.namedWindow(windowName, cv2.WINDOW_AUTOSIZE)# 创建两个滑动条,一个用于选择阈值类型,另一个用于选择阈值的具体数值
cv2.createTrackbar('Type', windowName, 0, 4, nothing)  # 阈值类型
cv2.createTrackbar('Value', windowName, 0, 255, nothing)  # 阈值数值while True:# 按下ESC键退出循环if cv2.waitKey(1) & 0xFF == 27:break# 获取滑动条的当前位置Type = cv2.getTrackbarPos('Type', windowName)  # 获取阈值类型Value = cv2.getTrackbarPos('Value', windowName)  # 获取阈值数值# 根据滑动条的值应用阈值处理ret, dst = cv2.threshold(img, Value, 255, Type)# 显示处理后的图像cv2.imshow(windowName, dst)# 关闭所有窗口
cv2.destroyAllWindows()

结果如图:

任务巩固:

如果你想要创建RGB颜色表,你可以使用滑动条来调整每个通道的颜色值,以实现动态调整颜色表的效果。

下面是一个简单的示例,演示如何使用滑动条来创建RGB颜色表:

代码:

import cv2
import numpy as np# 定义一个空函数,用作滑动条回调函数
def nothing(x):pass# 创建一个空白图像作为颜色表
img = np.zeros((512, 512, 3), np.uint8)# 定义窗口名称
windowName = "RGB Color Map"# 创建三个滑动条,分别用于调整红色、绿色和蓝色通道的值
cv2.namedWindow(windowName, cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar('R', windowName, 0, 255, nothing)  # 红色通道滑动条
cv2.createTrackbar('G', windowName, 0, 255, nothing)  # 绿色通道滑动条
cv2.createTrackbar('B', windowName, 0, 255, nothing)  # 蓝色通道滑动条while True:# 按下ESC键退出循环if cv2.waitKey(1) & 0xFF == 27:break# 获取滑动条的当前位置r = cv2.getTrackbarPos('R', windowName)  # 获取红色通道值g = cv2.getTrackbarPos('G', windowName)  # 获取绿色通道值b = cv2.getTrackbarPos('B', windowName)  # 获取蓝色通道值# 更新图像颜色img[:] = [b, g, r]  # 赋值BGR颜色# 显示颜色图像cv2.imshow(windowName, img)# 关闭窗口
cv2.destroyAllWindows()

结果如图:

 任务3:平滑处理基础

平滑处理是图像处理中常见的一种技术,用于减少图像中的噪声或细节,使图像更加平滑和均匀。常用的平滑处理方法包括均值滤波、中值滤波、高斯滤波等。

  1. 均值滤波:将图像中每个像素的值替换为其周围像素值的平均值。这种方法适用于轻度噪声的去除,但可能会导致图像边缘变得模糊。OpenCv里可以用 cv2.blur(src, ksize,  anchor, borderType)  src:这是输入的图像,可以是灰度图像或者彩色图像。ksize:这是指定的核大小,通常是一个奇数。它指定了在进行均值滤波时考虑的像素邻域大小。例如,如果 ksize 为 3,那么在进行均值滤波时,对于每个像素,它的邻域大小是 3x3。anchor:这是可选参数,表示核的锚点,默认值为 (-1, -1),即表示核的中心点。如果指定了其他值,则表示核的锚点位置。borderType:这是可选参数,表示图像边界的处理方式,默认值为 cv2.BORDER_DEFAULT。可以使用不同的边界处理方式,如 cv2.BORDER_CONSTANTcv2.BORDER_REPLICATE 等。

  2. 中值滤波:将图像中每个像素的值替换为其周围像素值的中值。中值滤波对于椒盐噪声等非线性噪声有较好的去除效果,且不会使图像边缘模糊。OpenCV里可以使用cv2.medianBlur(img,ksize)函数来实现。        

  3. img:这是输入的图像,可以是灰度图像或者彩色图像。

  4. ksize:这是中值滤波核的大小,通常是一个奇数。它指定了在进行中值滤波时考虑的像素邻域大小。例如,如果 ksize 为 3,那么在进行中值滤波时,对于每个像素,它的邻域大小是 3x3。中值滤波器将在这个邻域内计算像素值的中值,并将该中值作为该像素的新值。中值滤波器的工作原理是通过取邻域内像素的中值来去除图像中的噪声,而不会模糊边缘或细节

  5. 高斯滤波:利用高斯函数对图像进行加权平均,降低图像中高频部分的影响,从而实现平滑效果。高斯滤波常用于去除高斯噪声,同时保留图像细节。cv2.GaussianBlur(source,(3,3),0)
    第一个参数为图像对象
    第二个参数为滤波核
    第三个参数0为高斯核标准差

  6. 双边滤波是一种非线性滤波器,它在平滑图像的同时保留了边缘的信息。相比于其他平滑滤波器,双边滤波器考虑了像素之间的空间距离和像素值之间的灰度相似性。这使得它能够在去除噪声的同时保持图像的边缘清晰。在opencv中,用户可以使用cv2.bilateralFilter()函数实现对图像双边滤波处理.cv2.bilateralFilter(img,d,sigmaColor,sigmaSpace)

  7. img表示原图     d 表示滤波要采取的空间距离参数   sigmaColor:这个参数控制了在颜色空间中的标准差,它影响了颜色相似度的权重。较大的sigmaColor值会使得颜色更加容易混淆,因此滤波器会更加宽松地认为颜色相似。通常情况下,当图像中的噪声较强时,可以增大sigmaColor以增强滤波效果,但同时也会模糊边缘。sigmaSpace:这个参数控制了在空间距离上的标准差,它影响了空间相似度的权重。较大的sigmaSpace值意味着更广泛的空间距离内的像素将被考虑在内,即使它们的颜色差异较大,也可能被认为是相似的。增大sigmaSpace可以使得更远的像素对平滑过程产生影响,这样可以更好地保留图像的整体结构。

均值滤波代码

import cv2
import numpy as np# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 对图像进行均值滤波处理,模糊半径为7x7
blur = cv2.blur(img, (7, 7))# 显示原始图像
cv2.imshow('原始图像', img)# 显示经过均值滤波处理后的图像
cv2.imshow('均值滤波处理后的图像', blur)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

 结果如图:

高斯滤波 代码:

import cv2
import numpy as np# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 对图像进行高斯滤波处理,卷积核大小为7x7,标准差为10
gaussianBlur = cv2.GaussianBlur(img, (7, 7), 10)# 显示原始图像
cv2.imshow('原始图像', img)# 显示经过高斯滤波处理后的图像
cv2.imshow('高斯滤波处理后的图像', gaussianBlur)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

 结果如图:

 中值滤波代码

import cv2
import numpy as np# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 对图像进行中值滤波处理,核大小为7x7
median = cv2.medianBlur(img, 7)# 显示原始图像
cv2.imshow('原始图像', img)# 显示经过中值滤波处理后的图像
cv2.imshow('中值滤波处理后的图像', median)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

结果如图:

双边滤波代码:

import cv2
import numpy as np# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dczGaussian.jpg")# 对图像进行双边滤波处理,核大小为15,空间高斯标准差为300,灰度值相似性标准差为300
bilaterBlur = cv2.bilateralFilter(img, 15, 300, 300)# 显示原始图像
cv2.imshow('原始图像', img)# 显示经过双边滤波处理后的图像
cv2.imshow('双边滤波处理后的图像', bilaterBlur)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

结果如图:

四种滤波结合在一起:

import cv2
import numpy as np# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 均值滤波
blur = cv2.blur(img, (7, 7))# 方框滤波
box = cv2.boxFilter(img, -1, (7, 7), normalize=True)# 高斯滤波
gaussian = cv2.GaussianBlur(img, (7, 7), 10)# 中值滤波
median = cv2.medianBlur(img, 7)# 双边滤波
bilater = cv2.bilateralFilter(img, 9, 75, 75)# 自定义卷积核滤波
kernel = np.array(([-1, -1, 0],[-1, 1, 1],[0, 1, 2]), dtype="float32")
filter2D = cv2.filter2D(img, -1, kernel)# 显示图像
cv2.imshow('img', img)
cv2.imshow('blur', blur)
cv2.imshow('box', box)
cv2.imshow('gaussian', gaussian)
cv2.imshow('median', median)
cv2.imshow('bilater', bilater)
cv2.imshow('filter2D', filter2D)# 等待按键事件,关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的结果图太多了就不一一列举了:

上面的代码展示了如何使用OpenCV库对图像进行不同类型的平滑处理。以下是代码的意义和思路:

  1. 导入必要的库:导入了OpenCV库和NumPy库,用于图像处理和数组操作。

  2. 读取图像:使用cv2.imread()函数读取了指定路径下的图像文件。

  3. 应用不同的平滑滤波器:

    • 均值滤波:用cv2.blur()函数对图像进行均值滤波,平滑图像以减少噪声。
    • 方框滤波:使用cv2.boxFilter()函数进行方框滤波,也是一种线性滤波方法。
    • 高斯滤波:调用cv2.GaussianBlur()函数应用高斯滤波,对图像进行平滑处理。
    • 中值滤波:使用cv2.medianBlur()函数对图像进行中值滤波,适用于去除椒盐噪声。
    • 双边滤波:调用cv2.bilateralFilter()函数应用双边滤波,保留边缘的同时平滑图像。
    • 自定义卷积核滤波:使用cv2.filter2D()函数应用自定义卷积核进行滤波处理。
  4. 显示处理后的图像:使用cv2.imshow()函数显示原始图像和经过不同滤波器处理后的图像。

  5. 等待按键事件和关闭窗口:使用cv2.waitKey(0)等待用户按下键盘按键,然后调用cv2.destroyAllWindows()关闭所有窗口。

 任务4使用滑动条进行平滑处理

使用滑动条进行平滑处理是一种常见的图像处理任务场景,通常用于调节滤波器的参数以实现不同程度的平滑效果。这种交互式的方式可以让用户直观地调整参数并实时观察处理后的图像效果,从而更好地理解不同滤波器的作用和影响。

在这个任务场景中,您可以创建一个图形用户界面(GUI),包含一个滑动条(Slider)和一些按钮,用于选择不同的滤波器和控制滤波器的参数。用户可以通过拖动滑动条来调整参数,实时看到图像的平滑效果。这种交互式的方式可以帮助用户更直观地理解不同滤波器的功能和效果。

使用滑动条调整阈值:

代码:

import cv2# 回调函数,用于阈值处理
def Callback(a):# 获取滑动条当前位置Type = cv2.getTrackbarPos(tType, windowName)Value = cv2.getTrackbarPos(tValue, windowName)# 根据滑动条的值进行阈值处理ret, dat = cv2.threshold(img, Value, 255, Type)# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dczSalt.jpg", 0)# 定义窗口名称
windowName = "Threshold"
cv2.namedWindow(windowName)# 在窗口中显示图像
cv2.imshow(windowName, img)# 定义滑动条名称
tType = "Type"
tValue = "Value"# 创建滑动条
cv2.createTrackbar(tType, windowName, 0, 4, Callback)
cv2.createTrackbar(tValue, windowName, 0, 255, Callback)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

结果如图:

 使用滑动条对图像镜像平滑处理

代码:

import cv2# 回调函数,用于处理滑动条数值的变化
def onValue(a):# 获取滑动条当前位置Value = cv2.getTrackbarPos(tValue, windowName)# 根据滑动条的值进行中值滤波处理medianBlur = cv2.medianBlur(img, 2 * Value + 1)# 在窗口中显示中值滤波处理后的图像cv2.imshow(windowName, medianBlur)# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai4/dcz.jpg")# 定义窗口名称
windowName = "medianBlur"
cv2.namedWindow(windowName)# 在窗口中显示图像
cv2.imshow(windowName, img)# 定义滑动条名称
tValue = "Value"# 创建滑动条
cv2.createTrackbar(tValue, windowName, 0, 100, onValue)# 等待按键事件
cv2.waitKey(0)# 关闭所有窗口
cv2.destroyAllWindows()

结果如图:

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

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

相关文章

5分钟学会Rust语言如何操作JSON

JSON(JavaScript Object Notation)在Web开发中被广泛应用于数据交换。作为一种数据格式,JSON相较于XML来说,更易于阅读和写入,且数据解析性能强。Rust作为一门系统级编程语言,其与JSON的交互操作密切。本文将详细地描述在Rust中如…

循环双链表算法库构建

学习贺老师数据结构数据结构之自建算法库——循环双链表_数据结构编写一个程序linklist.cpp-CSDN博客 模仿单链表逻辑,实现双链表, 大差不差 v1.0: 实现基本功能 V1.0 1.主要功能: //(1)头插法建立循环双链表 void Create_Double_CyclicList_Head(DoubleLinkList_Cyclic *&am…

C++进阶(五) 哈希

1. unordered系列关联式容器 1.1 unordered_map 1.2 unordered_map的接口说明 2. 底层结构 2.1 哈希概念 2.2 哈希冲突 2.3 哈希函数 2.4 哈希冲突解决 2.4.1 闭散列 2.4.2 开散列 3. 模拟实现 3.1 unordered_set 3.2 unordered_map 4.哈希的应用 4.1 位图 4.1.…

HBase详解(2)

HBase 结构 HRegion 概述 在HBase中,会从行键方向上对表来进行切分,切分出来的每一个结构称之为是一个HRegion 切分之后,每一个HRegion会交给某一个HRegionServer来进行管理。HRegionServer是HBase的从节点,每一个HRegionServ…

华为海思2024春招数字芯片岗机试题(共9套)

huawei海思2024春招数字芯片岗机试题(共9套)(WX:didadidadidida313,加我备注:CSDN huawei数字题目,谢绝白嫖哈) 题目包含数字集成电路、System Verilog、Verilog2001、半导体制造技术、高级ASIC芯片综合、…

SpringCloud Alibaba Sentinel 实现熔断功能

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第十六篇,即使用 Sentinel 实现熔断功能。 二、 Ribbon 系列 首先我们新建两个服务的提供者…

【数据结构与算法】:快速排序和冒泡排序

一,快速排序 快速排序是一种比较复杂的排序算法,它总共有4种实现方式,分别是挖坑法,左右"指针"法,前后"指针"法,以及非递归的快速排序,并且这些算法中也会涉及多种优化措施…

1. 先简单看看项目吧

前言 就目前的前端生态而言,跨端开发基本算是每一个前端开发者必备的技能点之一了,随便看看各大招聘网站上关于前端岗位的招聘要求,几乎都要小程序开发了.... 另外由于Uni-app等这些跨端框架的产生,中小型企业对于Android/Ios等…

APP的UI设计规范

APP的设计规范是一系列原则和标准,旨在确保应用程序提供一致、易用且美观的用户体验。以下是一些关键的APP设计规范。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.一致性: 保持界面元素和交互行为的一致性…

网络协议——HTTP协议

目录 ​编辑 一,HTTP协议基本认识 二,认识URL 三,http协议的格式 1,发送格式 2,回应格式 四,服务端代码 五,http报文细节 1,Post与Get方法 2,Content_lenth 3&…

vscode教程

个人笔记(整理不易,有帮助点个赞) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 目录 一&#xff1a…

zheng项目:从零到一打造全方位J2EE企业级开发解决方案

zheng项目:从零到一打造全方位J2EE企业级开发解决方案 摘要: 在当今快速发展的企业级应用开发领域,一套高效、稳定且可扩展的解决方案对于企业的成功至关重要。zheng项目旨在提供一套全面的J2EE企业级开发解决方案,从前端模板到自…

Leetcode 581. 最短无序连续子数组

心路历程: 本以为这道题要用动态规划求解,因为题目中这几个关键字与动态规划太匹配了,结果想了半天也没发现dp(i)和dp(i-1)的递推关系。 这道题本意考察双指针的做法,也可以用排序后做比较的方式来做。 注意的点: 1…

性能优化 - 你能说一说,为什么做了骨架屏,FCP的指标还是没有提升吗

难度级别:中高级及以上 提问概率:80% FCP的全程是First Contentful Paint,是衡量网页性能的一个重要指标,很多人把FCP理解为元素内容首次渲染到浏览器上的时间。但由于现在比较流行的Vue或是React项目中,HTML文档最初只有一个id为app的DIV…

React18从入门到实战

文章目录 一、React环境的搭建二、项目文件的介绍(1)package.json,他是项目存放依赖包的地方,里面包括了一些项目核心包及下载的其他插件包(2)src文件夹是项目源码目录,平时开发页面就在其中&am…

Linux从入门到精通 --- 4(上).快捷键、软件安装、systemctl、软链接、日期和时区、IP地址

文章目录 第四章(上):4.1 快捷键4.1.1 ctrl c 强制停止4.1.2 ctrl d 退出4.1.3 history4.1.4 历史命令搜索4.1.5 光速移动快捷键4.1.6 清屏 4.2 软件安装4.2.1 yum4.2.2 apt 4.3 systemctl4.4 软链接4.4.1 ln 4.5 日期和时区4.5.1 date命令4.5.2 date进行日期加减…

如何魔改 diffusers 中的 pipelines

如何魔改 diffusers 中的 pipelines 整个 Stable Diffusion 及其 pipeline 长得就很适合 hack 的样子。不管是通过简单地调整采样过程中的一些参数,还是直接魔改 pipeline 内部甚至 UNet 内部的 Attention,都可以实现很多有趣的功能或采样生图结果。 本…

从0到1搭建文档库——sphinx + git + read the docs

sphinx git read the docs 目录 一、sphinx 1 sphinx的安装 2 本地构建文件框架 1)创建基本框架(生成index.rst ;conf.py) conf.py默认内容 index.rst默认内容 2)生成页面(Windows系统下&#xf…

项目:自主实现Boost搜索引擎

文章目录 写在前面开源仓库和项目上线其他文档说明 项目背景项目的宏观原理技术栈与环境搜索引擎原理正排索引倒排索引 去标签和数据清洗模块html文件名路径保存函数html数据解析函数文件写入函数 建立索引模块检索和读取信息建立索引建立正排索引建立倒排索引jieba工具的使用倒…

基于FPGA的按键消抖

按键工作原理 当KEY1按下时,整条电路就会导通,这个时候KEY1就是低电平; 当KEY1松开时,整条电路就会断开,这个时候KEY1就是高定平; 我们可以通过判断KEY1的高低电平来判断按键是否被按下。 为什么按键消…