openCV基础-图像预处理Day26
图像预处理
在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,以下是一些常见的图像预处理操作:
- 图像色彩空间转换
- 图像大小调整
- 图像仿射变换
- 图像翻转
- 图像裁剪
- 图像二值化处理
- 图像去噪
- 边缘检测
- 图像平滑处理
- 图像形态学
图像翻转
cv2.flip
是 OpenCV 库中的一个函数,用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数:要翻转的图像和一个指定翻转类型的标志。
函数签名
cv2.flip(src, flipCode[, dst]) -> dst
参数说明
-
src:输入图像,可以是任意类型和深度的多通道图像。
-
flipCode
:指定翻转类型的整数标志:
0
:沿 X 轴翻转(垂直翻转)1
:沿 Y 轴翻转(水平翻转)-1
:沿 X 轴和 Y 轴翻转(同时水平和垂直翻转)
-
dst:可选参数,输出图像。如果未提供,输出图像将与输入图像具有相同的尺寸和类型。
示例
以下是一些使用 cv2.flip
的示例代码:
import cv2# 加载图像
image = cv2.imread("save_image/car.png")
# 翻转: -1:水平和垂直 1:水平翻转,0 垂直翻转
img = cv2.flip(image, -1)
# 显示原始图像和翻转后的图像
cv2.imshow('img', img)
# 等待按键并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
图像仿射变换
仿射变换(Affine Transformation)是一种线性变换,它保持了点之间的相对距离不变,即平行线在变换后仍然保持平行。在图像处理中,仿射变换常用于旋转、缩放、平移和剪切等操作。
图像旋转
旋转操作可以将图像绕着某个点旋转一定的角度
实例代码
import cv2# 加载图像
image = cv2.imread("images/car.png")
# 获取图像的尺寸
(h, w) = image.shape[:2]
# 设置旋转中心和旋转角度
center = (w // 2, h // 2)
# 计算旋转矩阵
# 旋转角度(可修改)
angle = 40
# 缩放比例 1.0 表示不缩放
M = cv2.getRotationMatrix2D(center, angle, 1.0)
# 进行旋转
rotated_image = cv2.warpAffine(image, M, (w, h))
cv2.imshow('Rotated Image', rotated_image)
# 等待按键并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.getRotationMatrix2D
是 OpenCV 库中的一个函数,用于获取旋转矩阵。这个函数主要用于图像的旋转变换。旋转矩阵是一个 2x3 的矩阵,可以用来将图像围绕指定的中心点旋转指定的角度,并且可以选择是否进行缩放。
函数签名
cv2.getRotationMatrix2D(center, angle, scale) -> M
参数说明
- center:旋转中心点的坐标,格式为
(x, y)
。 - angle:旋转角度,单位为度。正角度表示逆时针旋转,负角度表示顺时针旋转。
- scale:缩放比例。如果设置为 1,则不进行缩放。
返回值
- M:2x3 的旋转矩阵。
示例
以下是一个使用 cv2.getRotationMatrix2D
的示例代码,
cv2.warpAffine 函数
仿射变换 函数
cv2.warpAffine(src, M, dsize, dst) →
- src: 输入图像。
- M: 2x3 的变换矩阵,类型为
np.float32
。 - dsize: 输出图像的尺寸,形式为
(width, height)
。 - dst (可选): 输出图像。如果未提供,则会自动创建一个新的图像。
图像平移
平移操作可以将图像中的每个点沿着某个方向移动一定的距离
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/car5.png")
#获取图片像素
(h, w) = img.shape[:2]
# 定义平移矩阵
#tx 图片x轴移动200,ty是图片y轴移动50px
tx, ty = 200, 50
#获取平移矩阵
M = np.float32([[1, 0, tx], [0, 1, ty]])
# 应用平移变换
translated = cv2.warpAffine(img, M, (w, h))
# 显示结果
cv2.imshow('Translated Image', translated)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,tx 和 ty 分别表示在x轴和y轴方向上的平移距离。
图像缩放
缩放操作可以改变图像的大小
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/car5.png")
h, w, channels = img.shape
# 定义缩放因子
sx, sy = 1.5, 1.5
M = np.float32([[sx, 0, 0], [0, sy, 0]])
# 应用缩放变换
scaled = cv2.warpAffine(img, M, (int(w * sx), int(h* sy)))
# 显示结果
cv2.imshow('Scaled Image', scaled)
cv2.waitKey(0)
cv2.destroyAllWindows()
sx 和 sy 分别表示在x轴和y轴方向上的缩放因子。
图像剪切
剪切操作可以改变图像的形状,使其在某个方向上倾斜
import cv2
import numpy as np# 读取图像
img = cv2.imread("images/car5.png")
rows, cols, _ = img.shape
# 定义剪切因子
shx, shy = 0.2, 0.2
M = np.float32([[1, shx, 0], [shy, 1, 0]])
# 应用剪切变换
sheared = cv2.warpAffine(img, M, (cols, rows))# 显示结果
cv2.imshow('Sheared Image', sheared)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像色彩空间转换
OpenCV中的色彩空间转换是将图像从一种颜色表示形式转换为另一种颜色表示形式的过程。常见的颜色空间包括RGB、HSV、YUV等。
色彩空间转换有几个重要的作用:
- 方便图像处理:在不同的颜色空间中,对应的通道代表了不同的属性,例如在RGB空间中,红、绿、蓝三个通道分别代表了颜色的强度,而在HSV空间中,H(色相)代表了颜色的种类,S(饱和度)代表了颜色的深浅,V(亮度)代表了颜色的明暗。因此,对于不同的处理需求,选择不同的颜色空间进行处理可以更加方便。
- 提高图像处理效果:在某些情况下,使用某些特定的颜色空间可以提高图像处理的效果。例如,在HSV空间中,可以通过调整S(饱和度)和V(亮度)来提高图像的对比度并去除噪点。
- 节省计算资源:在某些情况下,使用特定的颜色空间可以帮助我们节省计算资源。例如,在RGB空间中,每个像素需要3个通道来表示,而在灰度空间中,每个像素只需要一个通道就可以表示。因此,如果我们只需要处理亮度信息而不需要颜色信息时,将图像转换为灰度空间可以节省计算资源。
总之,色彩空间转换在图像处理中是一项非常重要的技术,它可以方便我们对图像进行处理,并提高图像处理的效果和节省计算资源。
cv2.cvtColor()
是OpenCV中的一个函数,用于图像颜色空间的转换。它可以将一个图像从一个颜色空间转换为另一个颜色空间,比如从RGB到灰度图像的转换,或者从BGR到HSV的转换等。
函数的语法如下:
cv2.cvtColor(src, code)
参数说明:
src
:输入图像,可以是一个NumPy数组或者一个OpenCV的Mat对象。code
:指定转换的类型,可以使用预定义的转换代码,例如cv2.COLOR_BGR2GRAY
表示从BGR到灰度图像的转换。
RGB 转 Gray(灰度)
RGB 转 Gray(灰度),将彩色图像转换为灰度图像,可以减少数据量并简化算法。
image = cv2.imread("../images/car.png")# 将图像从BGR到灰度图像的转换gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 显示原始图像和转换后的灰度图像cv2.imshow('old Image', image)cv2.imshow('new Image', gray_image)cv2.waitKey(0)cv2.destroyAllWindows()
RGB 转 HSV
RGB 转 HSV,HSV(Hue, Saturation, Value)色彩空间在颜色分割和颜色识别中非常有用。
import cv2
#在某些情况下,使用某些特定的颜色空间可以提高图像处理的效果。
# 例如,在HSV空间中,可以通过调整S(饱和度)和V(亮度)来提高图像的对比度并去除噪
image = cv2.imread("images/car.png")
# 将图像从BGR到灰度图像的转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#转换后的图像
cv2.imshow('new Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像二值化处理
案例:
import cv2# 读取图像并转换为灰度图
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 应用阈值
thresh_value = 127
retval, binary_image = cv2.threshold(image, thresh_value, 255, cv2.THRESH_BINARY)# 显示结果
cv2.imshow('原图', image)
cv2.imshow('二值图像', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.threshold
是 OpenCV 中用于图像二值化的函数。它通过设置阈值将图像分为前景和背景,常用于图像处理和分析。以下是该函数的主要功能和用法简介:
功能
cv2.threshold
将灰度图像转换为二值图像,根据指定的阈值将像素值分为两类:高于阈值的像素设为一个值(通常是255),低于阈值的像素设为另一个值(通常是0)。
语法
retval, dst = cv2.threshold(src, thresh, maxval, type)
参数
-
src: 输入的灰度图像。
-
thresh: 阈值,决定分割的界限。
-
maxval: 当像素值超过阈值时,赋予的最大值(通常为255)。
-
- type
- 阈值类型,常用的有:
cv2.THRESH_BINARY
: 超过阈值的像素设为最大值,其余设为0。cv2.THRESH_BINARY_INV
: 超过阈值的像素设为0,其余设为最大值。cv2.THRESH_TRUNC
: 超过阈值的像素设为阈值,其余不变。cv2.THRESH_TOZERO
: 超过阈值的像素不变,其余设为0。cv2.THRESH_TOZERO_INV
: 超过阈值的像素设为0,其余不变。
返回值
- retval: 实际使用的阈值(可能与输入值不同)。
- dst: 输出的二值图像。
图像掩模
它通常用于创建掩模,以便从图像中提取特定颜色的区域。
函数原型
cv2.inRange(src, lowerb, upperb)
参数
- src: 输入的图像,可以是彩色图像或灰度图像。
- lowerb: 颜色范围的下界(数组或元组),指定了要提取的颜色的最小值。
- upperb: 颜色范围的上界(数组或元组),指定了要提取的颜色的最大值。
返回值
- 返回一个二值图像,白色部分表示在指定颜色范围内的区域,黑色部分表示不在范围内的区域
案例
import cv2
import numpy as np# 读取图像
image = cv2.imread("images/car.png")
# 将图像从 BGR 转换到 HSV 颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义颜色范围,(蓝色区域)
lower = np.array([100, 100, 100])
upper = np.array([140, 255, 255])
# 使用 inRange 函数创建掩模
mask = cv2.inRange(hsv_image, lower, upper)
cv2.imshow('01', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像位与操作
cv2.bitwise_and()
是 OpenCV 库中的一个函数,用于对两个图像进行按位与操作。这个操作会逐个像素地对两个输入图像进行比较,只有在两个像素均为 255(白色)时,输出的像素才会为 255(白色),否则输出为 0(黑色)。这个函数在图像处理中的应用非常广泛,尤其是在掩膜和图像分割等任务中
函数原型
dst = cv2.bitwise_and(src1, src2, mask=None)
参数说明
src1
: 第一个输入图像。src2
: 第二个输入图像。两幅图像应具有相同的尺寸和类型。mask
: 可选参数,用于指定一个掩膜。如果提供,只有在掩膜的相应位置为非零时,才会计算输出。
返回值
- 返回按位与操作后的图像(
dst
)。
案例
import cv2
import numpy as np# 读取图像
image = cv2.imread("images/car.png")
# 将图像从 BGR 转换到 HSV 颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 定义颜色范围,(蓝色区域)
lower = np.array([100, 100, 100])
upper = np.array([140, 255, 255])
# 使用 inRange 函数创建掩模
mask = cv2.inRange(hsv_image, lower, upper)
#位与操作
image = cv2.bitwise_and(image,image,mask=mask)
cv2.imshow('01', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像检测轮廓
cv2.findContours
函数可以在二值图像中找到轮廓,并返回轮廓的点集。轮廓可以用来表示物体的边界,常用于物体检测、分割和形状分析。
语法
contours, hierarchy = cv2.findContours(image, mode, method)
参数
-
image: 输入的二值图像。通常在调用该函数之前需要将图像转换为灰度图像并进行二值化处理(如使用
cv2.threshold
或cv2.Canny
)。 -
- mode
- 轮廓检索模式:
cv2.RETR_EXTERNAL
: 只检索外部轮廓。cv2.RETR_LIST
: 检索所有轮廓,并将其放入列表中。cv2.RETR_TREE
: 检索所有轮廓,并建立层级关系。
-
- method
- 轮廓逼近方法:
cv2.CHAIN_APPROX_SIMPLE
: 压缩轮廓,仅保留端点。cv2.CHAIN_APPROX_NONE
: 保留所有轮廓点。
返回值
- contours: 一个 Python 列表,其中每个元素是一个轮廓(即一组点),轮廓的点以 NumPy 数组的形式存储。
- hierarchy: 轮廓的层级信息,包含轮廓之间的关系。
案例:
import cv2# 读取图像并转换为灰度图像
image = cv2.imread("images/car.png")
# 将图像从BGR到灰度图像的转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
retval, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 把灰度图像转换彩色图像
output_image = cv2.cvtColor(binary_image, cv2.COLOR_GRAY2BGR)
# 绘制轮廓
cv2.drawContours(output_image, contours, -1, (0, 255, 0), 2)
# 显示结果
cv2.imshow('Contours', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.boundingRect 函数介绍
cv2.boundingRect
是 OpenCV 中用于计算轮廓的最小外接矩形的函数。这个函数可以返回一个包含轮廓的最小矩形的边界框,通常用于对象检测、图像分割等任务中。最小外接矩形是一个完全包围轮廓的矩形,其边与图像的坐标轴平行。
案例
import cv2# 读取图像并转换为灰度图像
image = cv2.imread("images/car.png")
# 将图像从BGR到灰度图像的转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化处理
retval, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 把灰度图像转换彩色图像
output_image = cv2.cvtColor(binary_image, cv2.COLOR_GRAY2BGR)
# 绘制轮廓
cv2.drawContours(output_image, contours, -1, (0, 255, 0), 2)
# 在每个轮廓上绘制最小外接矩形
for contour in contours:#获取绘制轮廓的边界框x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(output_image, (x, y), (x + w, y + h), (0, 100, 0), 2)
# 显示结果
cv2.imshow('Contours', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
练习:
完成对车牌的分割提取
1 基于车牌是蓝色,可以通过掩模找到车牌所在区域
import cv2
import numpy as np# 读取图像
image = cv2.imread("../images/car.png")# 将图像从 BGR 转换到 HSV 颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 定义颜色范围,(蓝色区域)
lower = np.array([100, 100, 100])
upper = np.array([140, 255, 255])
# 使用 inRange 函数创建掩模
mask = cv2.inRange(hsv_image, lower, upper)
cv2.imshow('Contours', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
2 掩模返回一个二值对象,可以通过图像轮廓检测,检测当前掩码图像的轮廓
# 查找轮廓
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, 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('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3 获取所有轮廓的边界框,我们发现车牌轮廓也在期间,通过调试,我们给一个车牌尺寸的范围值,提取车牌
x, y, w, h = cv2.boundingRect(contour)if w > 50 and h > 20: # 可根据实际车牌尺寸调整cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
4 最后,用图片切割切出车牌
plate_image = image[y:y + h, x:x + w] # 切割车牌区域
相关文章:

openCV基础-图像预处理Day26
图像预处理 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,以下是一些常见的图像预处理操作&…...

给文件添加可读可写可执行权限
在Unix、Linux或类Unix操作系统中,你可以使用chmod命令来给文件添加可读、可写和可执行权限。权限通常分为三组:文件所有者(owner)、文件所属组(group)和其他用户(others)。每组都可…...

golang有序map
最近使用go开发排行榜的需求, 有些情况会用到有序map, 但是go竟然没有有序map的实现 本着自己动手丰衣足食的原则, 就自己实现了一个 原理 原理比较简单, 主要结合了container/list双向链表和map 使用双向链表存储key和value, 保证顺序, 使用map存储key和节点信息, 保证查找…...

【LangChain系列4】【Chain模块详解】
目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、Chain模块2-1、介绍2-2、LLMChain2-3、Sequential Chain(顺序链)2-4、Router Chain 总结 前言 LangChain给自身的定位是&…...

51c嵌入式~IO合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12383193 一、单片机通信数据接收解析方法 前阵子一朋友使用单片机与某外设进行通信时,外设返回的是一堆格式如下的数据: AA AA 04 80 02 00 02 7B AA AA 04 80 02 00 08 75 AA AA 04 80 02 00 9B E2…...

ETLCloud怎么样?深度解析其在数据管理中的表现
在BI或数据大屏等数据分析工具中,经常需要从多个业务系统中提取原始数据,然后对数据进行清洗、处理,以获取高质量、有效且干净的数据以供后续的BI进行数据统计和分析使用,从高质量的实现企业数据的价值变现。 然而,在…...

高频谐振功放电路
目录 集电极馈电电路 高频扼流圈的作用: 并联馈电回路 高频扼流圈作用 : 优缺点 对于并联的集电极馈电网络: 对于串联的集电极馈电网络: 神奇之处 基级馈电电路 自反偏压: 复合输出回路 天线回路 效率分析 总效率分析 互感如何改变工作状态 集电极馈电电路 馈电电路分…...

kafka如何获取 topic 主题的列表?
大家好,我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表?】面试题?希望对大家有帮助; kafka如何获取 topic 主题的列表? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,可以…...

全新大模型框架Haystack,搭建RAG pipeline
大家好,在AI应用开发的赛道上,目前Haystack以其开源框架的优势,成为LLM技术领域的一匹黑马,对现有竞争者构成挑战。本文将介绍Haystack的亮点优势,并分析它为何能在众多LLM框架中脱颖而出,通过RAG应用实例来…...

儿童孤独症专家分享:了解治疗与支持的专业帮助
在儿童的成长旅程中,每一步都充满了探索与发现。然而,对于患有孤独症的儿童来说,这段旅程往往伴随着更多的挑战与困难。孤独症,这个看似遥远的词汇,却深刻地影响着无数家庭的生活。作为儿童孤独症领域的专家࿰…...

初始JavaEE篇——多线程(7):定时器、CAS
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 定时器的使用 定时器的原理 模拟实现定时器 CAS 介绍 CAS的应用场景 解析 AtomicInteger 类 实现自旋锁 CAS的缺陷…...

高精度计算(乘)
引言 此篇是专栏信息学杂谈第八篇高精度计算(乘),展示了关于C如何实现高精度乘法的代码 正文: 乘法进位 c[i j - 1] a[i] * b[j] x; //x为之前进位 x c[i j - 1] / 10; c[i j - 1] % 10;完整代码: #include …...

在vue中 如何实现跨域
跨域问题是Web开发中常见的挑战,那么如何解决跨域呢,我们一起来看看吧! 跨域是什么? 跨域(Cross-Origin)是指网络请求从一个域名(origin)发起,而请求的目标资源位于另一…...

计算机考研,选择西安交通大学还是哈工大?
C哥专业提供——计软考研院校选择分析专业课备考指南规划 经过全面分析,2025年考研西安交通大学和哈尔滨工业大学计算机专业的报考难度对比如下: 西安交通大学计算机专业 > 哈尔滨工业大学计算机专业 对于想要报考985高校计算机专业但核心目标是优…...

微积分复习笔记 Calculus Volume 1 - 4.4 The Mean Value Theorem
4.4 The Mean Value Theorem - Calculus Volume 1 | OpenStax...

Cpp多态机制的深入理解(20)
文章目录 前言一、多态的概念二、多态的定义与实现两个必要条件虚函数虚函数的重写重写的三个例外override 和 final重载、重写(覆盖)、重定义(隐藏) 三、抽象类概念接口继承和实现继承 四、多态的原理虚表和虚表指针虚函数调用过程动态绑定与静态绑定 五、那...那单继承甚至多…...

(六)Python结构数据类型
一、集合类型(Sets) Sets(集合)是一个无序不重复的元素集。主要功能是自动清除重复的元素。创建集合时使用大括号{}包含其中元素。 Food{西瓜,南瓜,冬瓜,北瓜} print(Food) 输出结果: 增加重复元素,则会…...

C++进阶-->多态(Polymorphism)
1. 多态的概念 多态,顾名思义多种形态;多态分为编译时多态(静态多态)和运行时多态(动态多态),静态多态就是就是我们前面讲的函数重载和函数模板,可以通过传不同类型,然后…...

python实战项目51:selenium结合requests获取某众点评评论
python实战项目51:selenium结合requests获取某众点评评论 一、selenium获取cookies二、利用requests发送请求三、注意事项四、完整代码一、selenium获取cookies 首先,初始化selenium的webdriver,然后使用webdriver打开某众点评主页,之后手动扫码登录,利用selenium的get_c…...

面试准备第一版ssm spring-springmvc
请写出spring中常用的依赖注入方法: 1、setter 2、构造方法注入 3、字段注入 Setter 注入: 通过公共的 setter 方法进行依赖注入。优点:可选依赖,能更清晰地看到依赖关系。缺点:依赖在构造时不可用,可能导…...

Ubuntu学习笔记 - Day1
文章目录 学习目标:学习内容:学习笔记:Linux简介基于Linux内核的系统 Ubuntu简介GNU简介 远程连接Ubuntu查看Ubuntu的IP地址Mac连接Ubuntu此时可能显示报错,连接被拒绝解决办法连接成功连接退出 学习目标: 一周掌握 Li…...

挑战Java面试题复习第4天,坚持就是胜利
挑战第 4 天 Excption与Error包结构OOM 知识点SOF 知识点线程程序进程知识点有些字段不想序列化,怎么办?说说 IO 流Java IO与 NIO的区别 Excption与Error包结构 运行时异常(RuntimeException): 包括RuntimeException…...

Android 虚拟化框架(AVF)指南
Android 虚拟化框架(AVF)指南 一、项目介绍二、项目特色三、如何使用AVF四、总结 随着移动设备的普及和应用场景的多样化,安全性和隐私保护成为了移动操作系统的重要课题。Android作为全球最广泛使用的移动操作系统之一,一直在不断…...

day-77 超级饮料的最大强化能量
思路 动态规划:因为每一步要么选A,要么选B,所以问题可以转换为求最后一步从A选或从B选中的较大值 解题过程 定义而二维数组dp,dp[i][0]表示最后一步从A取能获得的最大能量,dp[i][1]表示最后一步从B取能获得的最大能量状态转换方程…...

有道小P 1.0.8 | 完全免费的AI全科学习助手,家长的好帮手
有道小P是一款由网易有道出品的完全免费的AI全科学习助手,专为中小学生设计。它支持多种输入方式,包括文字、语音和拍照识别,能够覆盖十个科目的所有题型,提供详细的解析和逐步解答,帮助孩子们理解和吸收知识。此外&am…...

vue项目中如何在路由变化时增加一个进度条
在 Vue.js 项目中,使用路由(如 Vue Router)时,为了提升用户体验,你可能会想要在路由变化时显示一个进度条。这可以通过多种方式实现,其中一种流行的做法是使用第三方库,如 vue-loading-bar 或 n…...

如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令以及Vscode中的环境路径配置中找不到gcc
配置环境变量教程很多,就不多说,说下耗费一小时解决的问题:mingw64安装后配置完环境变量仍然执行不了gcc命令 配置 了N次了,都还是在终端找不到指令,然后,将路径放到第一个,然后再看下…...

3-petalinux2018.3 摸索记录 - 命令驱动 _ 交叉编译链
一、命令行控制GPIO 对于ps端设备,在板卡的linux系统中,切换到/sys/class/gpio路径下可以看到目前挂载的gpio设备。 export: 导入用户空间 gpiochip: 系统中gpio寄存器信息 unexport: 移除用户空间 以MIO40和MIO42…...

【二分查找】——模板
二分查找模板题 一、题目要求 给定一个长度为n的非递减数组和一个数字target,要求找到数组中第一个大于等于target的位置pos,数组下标从 0 开始。如果不存在大于等于target的数字,则输出 -1。 二、输入格式 第一行:为两个正整…...

从可逆计算看DSL的设计要点
低代码平台的可视化设计器本质上是DSL(Domain Specific Language)的结构化编辑器。可视化设计器将编辑的结果序列化成文本格式时所采用的规范就是一种DSL语法定义。 Nop平台基于可逆计算原理,提出了一整套系统化的构建机制来简化DSL的设计和…...