OpenCV基础01

目录

一、环境安装

二、显示窗口

三、创建图片

四、图片保存

五、图像裁剪

六、调整图片大小

七、图像绘制

1、绘制圆形

2、绘制矩形

3、绘制文本

4、绘制直线

5、中文文本

八、控制鼠标

九、鼠标事件

十、视频处理


OpenCV作为C和C++语言的源代码文件,实现了许多常用的计算机视觉算法。

  • OpenCV的全称是Open Source Computer Vision Library,是一个开放源代码的计算机视觉库

  • OpenCV最初由英特尔公司发起并开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用,现在美国Willow Garage为OpenCV提供主要的支持

  • OpenCV可用于开发实时的图像处理,计算机视觉以及模式识别程序,目前在工业界以及科研领域广泛采用

cv2.namedWindow 是 OpenCV 库中的一个函数,用于创建一个命名窗口,以便在该窗口中显示图像或进行其他图形操作。这个函数在处理图像和视频时非常有用,尤其是在开发基于图像处理的应用程序时。

opencv的重要性

  • 计算机视觉:OpenCV 是计算机视觉领域的标准库之一,广泛应用于图像识别、物体检测、人脸识别、手势识别等。

  • 机器人技术:在机器人导航、环境感知和交互中,OpenCV 用于处理传感器数据和视觉信息。

  • 医学影像:在医学影像分析中,OpenCV 用于图像增强、分割和特征提取。

  • 自动驾驶:在自动驾驶汽车中,OpenCV 用于环境感知、障碍物检测和车道线识别。

  • 安全监控:在安全监控系统中,OpenCV 用于运动检测、人脸识别和行为分析。

    学习 OpenCV 不仅可以提升技术能力,还能在计算机视觉和图像处理领域的发展打开更多的门路。无论是学术研究、工业应用还是个人项目,OpenCV 都是一个不可或缺的工具

一、环境安装

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

 

二、显示窗口

cv2.namedWindow 是 OpenCV 库中的一个函数,用于创建一个命名窗口,以便在该窗口中显示图像或进行其他图形操作。这个函数在处理图像和视频时非常有用,尤其是在开发基于图像处理的应用程序时。

cv2.namedWindow(winname, flags=None)

 参数

  • winname (str): 窗口的名称。这个名称必须是唯一的,因为它是用来标识窗口的。

  • flags (int, 可选): 窗口的标志,用于设置窗口的行为。默认值为 cv2.WINDOW_AUTOSIZE

        常见的标志包括:

              cv2.WINDOW_NORMAL: 允许调整窗口大小。

              cv2.WINDOW_AUTOSIZE: 窗口大小根据图像大小自动调整,不能手动调整。

完整写法:

# 完整写法
def demo01():# 创建窗口函数,image 窗口名称 cv2.WINDOW.NORMAL 允许手动调整窗口大小cv2.namedWindow("image", cv2.WINDOW_NORMAL)# 设置窗口大小,image 窗口名称,必须和namedWindow的窗口名称一致cv2.resizeWindow("image", 500, 300)# 读取图片,imread 图片路径"""图片路径1、支持绝对和相对路径2、路径中不能使用中文3、图片路径如果有转义字符,用r""表达式进行转义image = cv2.imread(r'images/tar.png')"""image = cv2.imread('images/car.png')# 用窗口显示图片cv2.imshow("image", image)# 等待键盘操作,0:无限等待,waitKey 返回一个ASCII值while True:key = cv2.waitKey(0)if key == 113:print('退出')break# 释放资源(关闭窗口)cv2.destroyAllWindows()

 简写:

# 简写
def demo02():# 读取图片,imread 图片路径"""图片路径1、支持绝对和相对路径2、路径中不能使用中文3、图片路径如果有转义字符,用r""表达式进行转义image = cv2.imread(r'images/tar.png')"""image = cv2.imread('images/car.png')print(image)if image is None:print("图片不存在")return# 用窗口显示图片cv2.imshow("image", image)# 等待键盘操作,0:无限等待,waitKey 返回一个ASCII值while True:key = cv2.waitKey(0)if key == 113:print('退出')break# 释放资源(关闭窗口)cv2.destroyAllWindows()

 

三、创建图片

可以使用 np.zeros 函数创建一个全零数组,这个数组可以表示一个空白图像。数组的形状应该符合图像的尺寸和通道数(例如,对于 RGB 图像,形状应为 (height, width, 3))。

# 创建一个 500x500 像素的空白图像,3 个通道(RGB)
height, width, channels = 500, 500, 3
blank_image = np.zeros((height, width, channels), dtype=np.uint8)

 创建黑白图片

import cv2
import numpy as npdef create_picture():# 创建一个图片矩阵# 300 高度, 500 宽度, 3 通道(RGB), 1 灰度图像image = np.zeros((300, 500, 3), dtype=np.uint8)cv2.imshow('image', image)cv2.waitKey(0)cv2.destroyAllWindows()create_picture()

 


 

四、图片保存

cv2.imwrite 是 OpenCV 库中的一个函数,用于将图像保存到文件中。这个函数在图像处理和计算机视觉任务中非常常用,特别是在需要将处理后的图像结果保存到磁盘时。

cv2.imwrite(filename, img[, params])

参数 

  • filename (str): 要保存的文件路径和名称。支持的文件格式包括 .jpg, .png, .bmp, .tiff 等。

  • img (numpy.ndarray): 要保存的图像。通常是一个二维或三维的 NumPy 数组,表示图像的像素值。

返回值

  • bool: 成功保存图像返回 True,否则返回 False

import cv2
import numpy as np# 读取图片
# img = cv2.imread("images/car.png")
img = np.zeros((300, 500, 3), dtype=np.uint8)# 保存图片:imwrite(保存图片路径,图像矩阵),返回布尔值
# iss = cv2.imwrite("save_image/car01.png",img)
iss = cv2.imwrite("save_image/black.png", img)if iss:print("保存成功")
else:print("保存失败")

 


 

五、图像裁剪

在 OpenCV 中,图像切片用于从图像中提取一个子区域(矩形区域)。这种操作在图像处理中非常常见,特别是在进行目标检测、ROI(Region of Interest,感兴趣区域)提取等任务时。

语法

假设你有一个图像 img,它的类型是 numpy.ndarrayimg[y:y+h, x:x+w] 的含义如下:

  • x: 子区域左上角的 x 坐标。

  • y: 子区域左上角的 y 坐标。

  • w: 子区域的宽度。

  • h: 子区域的高度。

切片操作

  • img[y:y+h, x:x+w] 提取的是从 (x, y) 开始,宽度为 w,高度为 h 的矩形区域。

import cv2img = cv2.imread("images/car.png")# # 获取原图片像素
# h, w, c = img.shape
# print(f'高{h},宽{w},通道{c}')# 定义坐标
x = 100
y = 150
w = 300
h = 100
"""
img[y:y+h, x:x+w] 的含义如下:x: 子区域左上角的 x 坐标。y: 子区域左上角的 y 坐标。w: 子区域的宽度。h: 子区域的高度
"""
car_img = img[y:y+h, x:x+w]
cv2.imshow("old", img)
cv2.imshow("image", car_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 


 

六、调整图片大小

cv2.resize 是 OpenCV 库中的一个函数,用于调整图像的大小。这个函数在图像处理中非常常用,特别是在需要对图像进行缩放、放大或缩小以适应不同需求时。

cv2.resize(src, dsize, dst)

 参数

  • src (numpy.ndarray): 输入图像,通常是一个二维或三维的 NumPy 数组。

  • dsize (tuple): 输出图像的尺寸,是一个二元组 (width, height)。如果指定了 fxfy,则可以忽略此参数。

返回值

  • dst (numpy.ndarray): 缩放后的图像。

作用

  • 方便OCR文字识别,像素超过OCR文字的阈值时无法识别,需要调整图片大小。
  • 模型训练中,像素大小也会影响模型训练的复杂度。
import cv2"""
调整图片大小作用1、方便OCR文字识别,像素超过OCR文字的阈值时无法识别,需要调整图片大小2、模型训练中,像素大小也会影响模型训练的复杂度
"""# 读取图片
img = cv2.imread("images/car.png")
# print(img.shape)  # (276, 754, 3)# 获取图片大小
(h, w) = img.shape[:2]# 调整大小
r_img = cv2.resize(img, (200, 100))
(h, w) = r_img.shape[:2]
print(h, w)cv2.imshow('old', img)
cv2.imshow('new', r_img)cv2.waitKey(0)
cv2.destroyAllWindows()

 


 

七、图像绘制

1、绘制圆形

cv2.circle()函数用于在图像上绘制圆形。

cv2.circle(img, center, radius, color, thickness)

参数 

  • img:要绘制圆形的图像。

  • center:圆心的坐标。

  • radius:圆的半径。

  • color:圆的颜色,通常是一个表示BGR颜色的元组,例如(255, 0, 0)表示蓝色。

  • thickness:圆的边界线条的厚度,如果为负值或cv2.FILLED,表示填充整个圆。

 

"""
绘制圆形cv2.circle(img, center, radius, color, thickness)- `img`:要绘制圆形的图像。- `center`:圆心的坐标。- `radius`:圆的半径。- `color`:圆的颜色,通常是一个表示BGR颜色的元组,例如`(255, 0, 0)`表示蓝色。- `thickness`:圆的边界线条的厚度,如果为负值或`cv2.FILLED`,表示填充整个圆。
"""
def draw_circle():img = cv2.imread('images/car.png')# 圆心坐标center = (50, 50)# 半径radis = 50# 颜色 (BGR RGB都可以) RGB红色(0,0,255)color = (0, 0, 255)# 线条宽度w = 3# 画圆c_img = cv2.circle(img, center, radis, color, w)cv2.imshow('img', img)cv2.waitKey(0)cv2.destroyAllWindows()

2、绘制矩形

cv2.rectangle()函数用于在图像上绘制矩形。

cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

参数

  • img:要绘制矩形的图像。

  • pt1:矩形的一个顶点。

  • pt2:矩形对角线上的另一个顶点。

  • color:矩形的颜色,通常是一个表示BGR颜色的元组,例如(255, 0, 0)表示蓝色。

  • thickness:矩形边框的厚度,如果为负值或cv2.FILLED,表示填充整个矩形内部。

"""
绘制矩形cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])- `img`:要绘制矩形的图像。- `pt1`:矩形的一个顶点。- `pt2`:矩形对角线上的另一个顶点。- `color`:矩形的颜色,通常是一个表示BGR颜色的元组,例如`(255, 0, 0)`表示蓝色。- `thickness`:矩形边框的厚度,如果为负值或`cv2.FILLED`,表示填充整个矩形内部。
"""
def draw_rectangle():img01 = np.zeros((200, 500, 3), dtype=np.uint8)# 定义绘制矩形的左上角坐标left_top = (100, 100)# 定义绘制矩形的右下角坐标right_bottom = (200, 200)# 定义颜色color = (0, 0, 255)# 定义线条宽度w = 5# 绘制矩形cv2.rectangle(img01, left_top, right_bottom, color, w)cv2.imshow('Rectangle', img01)cv2.waitKey(0)cv2.destroyAllWindows()

3、绘制文本

cv2.putText()是 OpenCV 库中的一个函数,用于在图像上添加文本。这个函数在图像处理和计算机视觉任务中非常有用,特别是在需要标注图像、显示信息或调试时。 。

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

参数

  • img (numpy.ndarray): 输入图像,通常是一个二维或三维的 NumPy 数组。

  • text (str): 要添加的文本字符串。

  • org (tuple): 文本的起始位置,是一个二元组 (x, y),表示文本左下角的坐标。

  • fontFace

    (int): 字体类型,常见的字体类型包括:

    • cv2.FONT_HERSHEY_SIMPLEX: 正常大小的无衬线字体

    • cv2.FONT_HERSHEY_PLAIN: 小号的无衬线字体

    • cv2.FONT_HERSHEY_DUPLEX: 正常大小的无衬线字体,比 FONT_HERSHEY_SIMPLEX 更粗

    • cv2.FONT_HERSHEY_COMPLEX: 正常大小的有衬线字体

    • cv2.FONT_HERSHEY_TRIPLEX: 正常大小的有衬线字体,比 FONT_HERSHEY_COMPLEX 更粗

    • cv2.FONT_HERSHEY_SCRIPT_SIMPLEX: 手写风格的字体

    • cv2.FONT_HERSHEY_SCRIPT_COMPLEX: 手写风格的字体,比 FONT_HERSHEY_SCRIPT_SIMPLEX 更粗

    • cv2.FONT_ITALIC: 斜体修饰符,可以与其他字体类型组合使用

  • fontScale (float): 字体大小的比例因子。

  • color (tuple): 文本颜色,是一个三元组 (B, G, R),表示蓝色、绿色和红色的值。

  • thickness (int, 可选): 文本线条的厚度,默认值为 1。

  • lineType

    (int, 可选): 线条类型,常见的线条类型包括:

    • cv2.LINE_4: 4 连通线

    • cv2.LINE_8: 8 连通线

    • cv2.LINE_AA: 抗锯齿线(默认值)

4、绘制直线

cv2.line(img, pt1, pt2, color, thickness lineType)

参数

  • img: 输出图像,即要在这张图上绘制直线的图像。通常是一个 NumPy 数组。

  • pt1: 直线的一个端点,是一个包含两个元素(x, y)的元组,代表该点的坐标。

  • pt2: 直线的另一个端点,也是一个包含两个元素(x, y)的元组,代表该点的坐标。

  • color: 直线的颜色,对于 BGR 图像,这应该是一个包含三个整数的元组,分别对应蓝色、绿色和红色的强度(例如 (255, 0, 0) 表示纯蓝色)。对于灰度图像,只需要一个整数值即可。

  • thickness: 可选参数,定义直线的宽度。默认值是 1。

"""
绘制直线
"""
def draw_line():img = cv2.imread('images/car.png')# 直线起始坐标start = (100, 150)# 截止坐标end = (200, 150)# 颜色color = (0, 0, 255)# 宽度w = 10l_img = cv2.line(img, start, end, color, w)cv2.imshow('line', l_img)cv2.waitKey(0)cv2.destroyAllWindows()

5、中文文本

在使用 OpenCV 的 cv2.putText 函数添加中文时,可能会遇到显示乱码的问题。这是因为 OpenCV 默认使用的字体不支持中文字符。为了在图像上正确显示中文,可以使用 PIL(Pillow)库来处理文本,然后将文本渲染到图像上。

  1. 安装opencv-python和pillow库:
    pip install opencv-python pillow
  2. 下载中文字体文件,常见的中文字体文件有 simhei.ttfsimsun.ttc 等。
  3. 定义put_text函数
    def put_text(image, text, position, font_path, font_size, color):# 将 OpenCV 图像转换为 PIL 图像pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(pil_image)# 加载字体font = ImageFont.truetype(font_path, font_size)# 在图像上绘制文本draw.text(position, text, fill=color, font=font)# 将 PIL 图像转换回 OpenCV 图像image_with_text = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)return image_with_text
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFontdef put_text(image, text, position, font_path, font_size, color):# 将 OpenCV 图像转换为 PIL 图像pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(pil_image)# 加载字体font = ImageFont.truetype(font_path, font_size)# 在图像上绘制文本draw.text(position, text, fill=color, font=font)# 将 PIL 图像转换回 OpenCV 图像image_with_text = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)return image_with_textimg = cv2.imread('images/car.png')
# 定义文本内容
text = '你好,世界!'
# 起始坐标 org (x,y)
position = (350, 180)
# 字体格式 fontFace
font_path = 'font/simhei.ttf'
# 字体大小 fontScale
font_size = 30
# 字体颜色 BGR红色 (255,0,0)
color = (255, 0, 0)
# 绘制字体
c_img = put_text(img, text, position, font_path, font_size, color)
cv2.imshow('chinese_text', c_img)cv2.waitKey(0)
cv2.destroyAllWindows()


 

八、控制鼠标

cv2.setMouseCallback 是 OpenCV 提供的一个非常有用的函数,它允许用户定义一个回调函数,当鼠标事件发生时(如点击、释放、移动等),该回调函数会被调用。这在创建交互式应用程序时特别有用,比如图像标注工具、绘图程序等。

import cv2"""
鼠标回调函数event: 鼠标事件x,y: 鼠标在图像区域所在的坐标flag: 标识param: 参数
"""def mouse_callback(event, x, y, flag, param):print(event)print(f'坐标{(x,y)}')print(f'flag={flag}')print(f'param={param}')img = cv2.imread('images/car.png')# 创建对应窗口
cv2.namedWindow('name')
# 设置执行鼠标操作的回调函数
cv2.setMouseCallback('name', mouse_callback)
cv2.imshow('name', img)cv2.waitKey(0)
cv2.destroyAllWindows()

 

九、鼠标事件

案例:在图片上通过操控鼠标来进行绘制图像

import cv2"""
鼠标回调函数event: 鼠标事件x,y: 鼠标在图像区域所在的坐标flag: 标识param: 参数
"""def mouse_control(event, x, y, flag, param):global d# 鼠标左键按下的事件if event == cv2.EVENT_LBUTTONDOWN:print("鼠标左键按下")cv2.circle(img, (x, y), 50, (0, 255, 0), 2)d = Trueelif event == cv2.EVENT_LBUTTONUP:print("鼠标左键释放")# cv2.circle(img, (x, y), 40, (255, 255, 255), 2)d = Falseelif event == cv2.EVENT_MOUSEMOVE:print("鼠标移动")# d为True时才会触发if d:cv2.circle(img, (x, y), 25, (255, 0, 0), 2)img = cv2.imread('images/car.png')
# 定义窗口
cv2.namedWindow('mouse_control')
d = False
# 设置执行鼠标操作的回调函数
cv2.setMouseCallback('mouse_control', mouse_control)
while True:cv2.imshow('mouse_control', img)# 按下ESC键 关闭程序if cv2.waitKey(20) == 27:break
# 关闭窗口
cv2.destroyAllWindows()

 

十、视频处理

cv2.VideoCapture 是 OpenCV 库中的一个类,用于从摄像头或视频文件中捕获视频帧。这个类提供了多种方法来控制视频捕获的过程,包括打开视频文件、读取视频帧、获取视频属性等。

常用方法

  • read()

read() 方法用于从视频源中读取下一帧。它返回一个布尔值和图像帧。布尔值表示是否成功读取了帧,图像帧是一个 NumPy 数组。

  • release()

release() 方法用于释放视频捕获资源。在完成视频处理后,必须调用此方法来释放摄像头或视频文件。

  • isOpened()

isOpened() 方法用于检查视频捕获对象是否已经成功打开。

  • get() 和 set()

get()set() 方法用于获取和设置视频捕获属性。常用的属性包括帧宽、帧高、帧率等。

import cv2# 0:开启摄像头; 参数如果是视频路径则是开启视频
cap = cv2.VideoCapture('video/1.mp4')
# 创建窗口函数,image 窗口名称
cv2.namedWindow("video", cv2.WINDOW_NORMAL)
# 设置窗口大小,image 窗口名称,必须和namedWindow的窗口名称一致
cv2.resizeWindow("video", 500, 300)while True:# 读取视频 ret:是否读取到;frame:图片(帧)ret, frame = cap.read()if ret:cv2.imshow('video', frame)if cv2.waitKey(20) == 27:break
cv2.destroyAllWindows()

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

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

相关文章

git:将多个提交合并为一个

如何将第一至第五次提交合并为一个? 1. 使用 git log -n 命令查看spring boot admin的commit-id,本例n6,命令如下: PS E:\liguogang\spring-cloud> git log -62. 使用 git reset --soft commit-id 命令将前五次提交重置到工作…

Leetcode 二叉树中的最大路径和

算法思想 这道题要求在一棵二叉树中找到路径和最大的路径。路径可以从树中任意一个节点开始,到任意一个节点结束,但路径上的节点必须是连续的。 算法使用递归的方式来遍历树中的每个节点,并在遍历过程中计算包含当前节点的最大路径和。具体…

Python 变量在函数中的作用域

什么是局部变量? 作用范围在函数内部,在函数外部无法使用 什么是全局变量? 在函数内部和外部均可使用 如何将函数内定义的变量声明为全局变量? 使用global关键字, global变量 练习: 演示局部变量 #…

【Android】Kotlin教程(4)

文章目录 1.field2.计算属性3.主构造函数4.次构造函数5.默认参数6.初始化块7.初始化顺序7.延迟初始化lateinit8.惰性初始化 1.field field 关键字通常与属性的自定义 getter 和 setter 一起使用。当你需要为一个属性提供自定义的行为时,可以使用 field 来访问或设置…

SSH登录介绍

说明:一般登录服务器,我们可以用远程连接工具,如XShell、Windterm等,或者通过公司搭建的JumpServer(跳板机、堡垒机)来连接。前者是点对点登录,输入主机、端口,通过SSH协议登录&…

unity中预制体的移动-旋转-放缩

unity中预制体的移动-旋转-放缩 左上侧竖栏图标介绍Tools(手形工具)Move Tool(移动工具,单位米)Rotate Tool(旋转工具,单位角度)Scale Tool(缩放工具,单位倍数)Rect Tool(矩形工具)Transform Tool(变换工具)图标快捷键对照表工具使用的小技巧…

HarmonyOS开发 - 本地持久化之实现LocalStorage实例

用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 说明&#x…

java程序打包为一个exe程序

ok,最近学到了一个有意思的东西 那就是如何将自己写好的java程序打包成一个exe程序,发给别人,然后运行。 那么开始之前,请先安装整个工具: exe4j:https://www.ej-technologies.com/exe4j/download&#…

高并发设计模式之ForkJoin模式

分而治之是一种思想,所谓分而治之就是把一个复杂的算法问题按一定的分解方法分为规模较小的若干部分,然后逐个解决,分别找出各部分的解,最后把各部分的解在整合成整个问题的解.ForkJoin模式就是分而治之思想的另一种应用. ForkJoin模式的原理 ForkJoin模式先把一个大任务分解…

AMD XILINX 20nm器件价格上调25%

随着市场回暖,台积电也在调整价格策略,近期台积电上调了20nm的出厂价格。 据相关消息显示,AMD为了保障持续的供货和服务,也计划将20nm器件的价格统一上调25%,预计将于11月发布正式的涨价通知,并于2025年Q1开…

EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾! 回复暗号:13,免费获取600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于opencv答题卡识别判卷】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【G…

为何我们要将测试左移?回到过去的美好时光

以下为作者观点: 为何我们将测试左移?在传统的开发周期中,测试通常在功能完成后甚至在开发阶段结束时进行。左移测试通过从开发过程开始到整个开发过程整合测试活动来挑战这一点。 让我们首先讨论一下为什么我们选择“左移”,因…

java项目之基于智能推荐的卫生健康系统(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于智能推荐的卫生健康系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于智能推荐…

性能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介:自由贸易试验区(Free Trade Zone,简称FTZ)是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物,被认为在关境以外,免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件,手动创建即可。 运行 常规功能 debug模式 修改内容自动更新,否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…

野火鲁班猫4 (RK3588)系统配置

烧写系统 参考文档 : https://doc.embedfire.com/linux/rk3588/quick_start/zh/latest/quick_start/apt/apt.html 先装第一个软件,然后打开第二个软件。点固件,选择Ubuntu最新的固件,这边目前是20240911这个。 我这边直接烧写到…

Servlet 3.0 新特性全解

文章目录 Servlet3.0新特性全解Servlet 3.0 新增特性Servlet3.0的注解Servlet3.0的Web模块支持servlet3.0提供的异步处理提供异步原因实现异步原理配置servlet类成为异步的servlet类具体实现异步监听器改进的ServletAPI(上传文件) Servlet3.0新特性全解 tomcat 7以上的版本都支…