当前位置: 首页 > news >正文

如何做电影网站/百度竞价推广是什么意思

如何做电影网站,百度竞价推广是什么意思,成都的企业网站建设公司,西安建设教育网站文章结构 缩放dsize参数实现缩放fx参数和fy参数实现缩放 翻转仿射变换平移旋转倾斜 透视cmath模块 缩放 通过resize()方法可以随意更改图像的大小比例: dst cv2.resize(src, dsize, fx, fy, interpolation)src: 原始图像dsize: 输出图像的…

文章结构

  • 缩放
    • dsize参数实现缩放
    • fx参数和fy参数实现缩放
  • 翻转
  • 仿射变换
    • 平移
    • 旋转
    • 倾斜
  • 透视
  • cmath模块

缩放

通过resize()方法可以随意更改图像的大小比例:

dst = cv2.resize(src, dsize, fx, fy, interpolation)
  • src: 原始图像
  • dsize: 输出图像的大小,格式为(宽,高),单位为像素
  • fx: (可选)水平方向的缩放比例
  • fy: (可选)竖直方向的缩放比例
  • interpolation: (可选)缩放的插值方式,在图像缩小或放大时需要删减或补充像素,该参数可以指定使用哪种算法对像素进行增减,建议使用默认值
  • dst: 缩放之后的图像

resize()方法有两种使用方式,一种时通过dsize参数实现缩放,另一种时通过fx和fy参数实现缩放。

dsize参数实现缩放

dsize参数的格式是一个元组,例如(100,200),表示将图像按照宽100像素、高200像素的大小进行缩放。如果使用dsize参数,就可以不写fx和fy参数。

实例1: 将图像按照指定宽高进行缩放

import cv2img = cv2.imread("3.png")  # 读取图像
dst1 = cv2.resize(img, (100, 100))  # 按照宽100像素、高100像素的大小进行缩放
dst2 = cv2.resize(img, (400, 400))  # 按照宽400像素、高400像素的大小进行缩放
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst1", dst1)  # 显示缩放图像
cv2.imshow("dst2", dst2)
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述

fx参数和fy参数实现缩放

使用fx参数和fy参数控制缩放时,dsize参数值必须使用None,否则fx和fy会失效。fx参数和fy参数可以使用浮点值,小于1的值表示缩小,大于1的值表示放大。其计算公式为:

  • 新图像宽度 = round( fx × 原图像宽度)
  • 新图像高度 = round( fy × 原图像高度)

实例2: 将图像按照指定比例进行缩放

import cv2img = cv2.imread("3.png")  # 读取图像
# 将宽缩小到原来的1/3、高缩小到原来的1/2
dst3 = cv2.resize(img, None, fx=1/3, fy=1/2)
dst4 = cv2.resize(img, None, fx=1.5, fy=1.5)  # 将宽高扩大1.5倍
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst3", dst3)  # 显示缩放图像
cv2.imshow("dst4", dst4)  # 显示缩放图像
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述

翻转

水平方向被称为X轴,垂直方向被称为Y轴。图像沿着X轴或者Y轴反转之后,可以呈现出镜面倒影的效果。

dst = cv2.flip(src, flipCode)
  • src: 原始图像
  • flipCode: 翻转类型
  • dst: 翻转之后的图像

flipCode参数值及含义:

参数值含义
0沿着X轴翻转
正数沿着Y轴翻转
负数同时沿着X轴、Y轴翻转

实例3: 同时实现三种翻转效果

import cv2img = cv2.imread("3.png")  # 读取图像
dst1 = cv2.flip(img, 0)  # 沿X轴翻转
dst2 = cv2.flip(img, 1)  # 沿Y轴翻转
dst3 = cv2.flip(img, -1)  # 同时沿X轴、Y轴翻转
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst1", dst1)  # 显示翻转之后的图像
cv2.imshow("dst2", dst2)
cv2.imshow("dst3", dst3)
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述

仿射变换

仿射变换是一种仅在二维平面中发生的几何变形,变换之后的图像仍然可以保持直线的“平直性”和“平行性”,包含平移、旋转和倾斜。

在这里插入图片描述

dst = cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)
  • src: 原始图像。
  • M: 一个2行3列的矩阵,根据此矩阵的值变换原图中的像素位置。
  • dsize: 输出图像的尺寸大小。
  • flags: 可选参数,插值方式,建议使用默认值。
  • borderMode: (可选)边界类型,建议使用默认值。
  • borderValue: (可选)边界值,默认为0,建议使用默认值返回值说明:
  • dst: 经过仿射变换后输出图像

M也被叫作仿射矩阵,实际上就是一个2x3的列表,其格式如下所示:

M = [[a, b, c], [d, e, f]]

图像做何种仿射变换,完全取决于 M 的值,仿射变换输出的图像会按照以下公式进行计算:

  • 新x = 原x × a + 原y × b + c
  • 新y = 原x × d + 原y × e + f

M矩阵中的数字采用32位浮点格式。可以采用两种方式创建M。

  • 创建一个全是0的M
import numpy as np
M = np.zeros((2,3), np.float32)
  • 创建M的同时赋予具体值
import numpy as np
M = np.float32([[1, 2 ,3], [4, 5, 6]])

通过设定M的值就可以实现多种仿射效果

平移

平移就是让图像中所有的像素同时沿着水平或垂直方向移动。实现这种效果只需要将M的值按照以下格式进行设置:

M = [[1, 0, 水平移动的距离],[0, 1, 垂直移动的距离]]

原始图像的像素就会按照以下公式进行变换:

  • 新x = 原x × 1 + 原y × 0 + 水平移动的距离
  • 新y = 原x × 0 + 原y × 1 + 垂直移动的距离

实例4: 让图像向右下方平移

import cv2
import numpy as npimg = cv2.imread("3.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
M = np.float32([[1, 0, 50],  # 横坐标向右移动50像素[0, 1, 100]])  # 纵坐标向下移动100像素
dst = cv2.warpAffine(img, M, (cols, rows))
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述

旋转

让图像旋转也是通过M矩阵实现的,但得出这个矩阵需要做很复杂的计算,于是OpenCV提供了getRotationMatrix2D()方法来自动计算出旋转图像的M矩阵。

M = cv2.getRotationMatrix2D(center, angle, scale)
  • center: 旋转的中心点坐标
  • angle: 旋转的角度(不是弧度),正数表示逆时针旋转,负数表示顺时针旋转
  • scale: 缩放比例,浮点类型,如果取值1,表示图像保持原来的比例
  • M: 方法计算出的仿射矩阵

实例5: 让图像逆时针旋转

import cv2img = cv2.imread("3.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
center = (rows/2, cols/2)  # 图像的中心点
# 以图像为中心,逆时针旋转30度,缩放0.8倍
M = cv2.getRotationMatrix2D(center, 30, 0.8)
dst = cv2.warpAffine(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述

倾斜

OpenCV需要定位图像的三个点来计算倾斜效果,三个点的位置如下图所示:
在这里插入图片描述
OpenCV会根据这三个点的位置变化来计算其他像素的位置变化。因为要保证图像的“平直性”和“平行性”,所以不需要“右下角”的点做第四个参数,右下角这个点的位置会根据 A、B、C 三点的变化自动计算得出。

让图像倾斜也是需要通过M矩阵实现的,但得出这个矩阵需要做很复杂的运算,于是 OpenCV提供了getAffineTransform()方法来自动计算出倾斜图像的M矩阵。

M = cv2.getAffineTransform(src, dst)
  • src: 原图三个点坐标,格式为 3行2列的 32 位浮点数列表,例如: [[0,1] [1,0],[1,1]]
  • dst: 倾斜图像的三个点坐标,格式与 src 一样。
  • M: 方法计算出的仿射矩阵

实例6: 让图像向右倾斜

import cv2
import numpy as npimg = cv2.imread("3.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
p1 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,原图三个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p2 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,倾斜图三个点
p2[0] = [50, 0]  # 左上角点坐标,向右挪50像素
p2[1] = [cols - 1, 0]  # 右上角点坐标,位置不变
p2[2] = [0, rows - 1]  # 左下角点坐标,位置不变
M = cv2.getAffineTransform(p1, p2)  # 根据三个点的变化轨迹计算出M矩阵
dst = cv2.warpAffine(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:

在这里插入图片描述
想让图像向左倾斜,不能通过移动A点来实现,需要通过移动B点和C点来实现:

p1 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,原图三个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p2 = np.zeros((3, 2), np.float32)  # 32位浮点型空列表,倾斜图三个点
p2[0] = [0, 0]  # 左上角点坐标,位置不变
p2[1] = [cols - 1 - 50, 0]  # 右上角点坐标,向左移动50像素
p2[2] = [50, rows - 1]  # 左下角点坐标,向右移动50像素

透视

如果说仿射是让图像在二维平面中变形,那么透视就是让图像在三维空间中变形。从不同的角度观察物体,会看到不同的变形画面,例如矩形会变成不规则的四边形、直角会变成锐角或钝角、圆形会变成椭圆等。这种变形之后的画面就是透视图。

如图 8.24 所示从图像的底部去观察图 8.25 的话,图像底部距离眼睛较近,所以宽度不变。但图像顶部距离眼睛较远,宽度就会等比缩小,于是观察者就会看到如图 8.26 所示的透视效果。

在这里插入图片描述
OpenCV中需要通过定位图像的四个点来计算透视效果,四个点的位置如下图所示。OpenCV会根据这四个点的位置变化计算出其他像素的位置变化。透视效果不能保证图像的“平直性”和“平行性”。

在这里插入图片描述

dst = cv2.warpPerspective(src, M, dsize, flags, borderMode, borderValue)
  • src: 原始图像
  • M: 一个3 行 3 列的矩阵,根据此矩阵的值变换原图中的像素位置
  • dsize: 输出图像的尺寸大小。
  • flags: (可选)插值方式,建议使用默认值。
  • borderMode: (可选)边界类型,建议使用默认值。
  • borderValue: (可选)边界值,默认为 0,建议使用默认值
  • dst: 经过透视变换后输出图像。

warpPerspective() 方法也需要通过 M矩阵来计算透视效果,但得出这个矩阵需要做很复杂的运算,于是OpenCV 提供了getPerspectiveTransform() 方法来自动计算M矩阵。

M = cv2.getPerspectiveTransform(src, dst)
  • src: 原图四个点坐标,格式为4行2列的32位浮点数列表,例如[[0,0],[0,1],[1,0][1,1]]
  • dst: 透视图的四个点坐标,格式与 src一样
  • M: 方法计算出的仿射矩阵

实例7: 模拟从底部观察图像得到的透视效果

import cv2
import numpy as npimg = cv2.imread("demo.png")  # 读取图像
rows = len(img)  # 图像像素行数
cols = len(img[0])  # 图像像素列数
p1 = np.zeros((4, 2), np.float32)  # 32位浮点型空列表,保存原图四个点
p1[0] = [0, 0]  # 左上角点坐标
p1[1] = [cols - 1, 0]  # 右上角点坐标
p1[2] = [0, rows - 1]  # 左下角点坐标
p1[3] = [cols - 1, rows - 1]  # 右下角点坐标
p2 = np.zeros((4, 2), np.float32)  # 32位浮点型空列表,保存透视图四个点
p2[0] = [90, 0]  # 左上角点坐标,向右移动90像素
p2[1] = [cols - 90, 0]  # 右上角点坐标,向左移动90像素
p2[2] = [0, rows - 1]  # 左下角点坐标,位置不变
p2[3] = [cols - 1, rows - 1]  # 右下角点坐标,位置不变
M = cv2.getPerspectiveTransform(p1, p2)  # 根据四个点的变化轨迹计算出M矩阵
dst = cv2.warpPerspective(img, M, (cols, rows))  # 按照M进行仿射
cv2.imshow("img", img)  # 显示原图
cv2.imshow("dst", dst)  # 显示仿射变换效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

结果如下:
在这里插入图片描述

** 实例8:** 生成图书封面俯视图

import cv2
import numpy as npw, h = 320, 480 # 俯视图的宽高
img = cv2.imread("book.jpg") # 读取原图
tmp = cv2.GaussianBlur(img, (5, 5), 0) # 高斯滤波
tmp = cv2.Canny(tmp, 50, 120) # 变为二值边缘图像
# 闭运算,保证边缘闭合
tmp = cv2.morphologyEx(tmp, cv2.MORPH_CLOSE, (15, 15), iterations=2)
# 检测轮廓
contours, _ = cv2.findContours(tmp, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours: # 遍历所有轮廓area = cv2.contourArea(c) # 计算轮廓面积if area > 10000: # 只处理面积廓大于10000的轮廓length = cv2.arcLength(c, True) # 获取轮廓周长approx = cv2.approxPolyDP(c, 0.02 * length, True) # 计算出轮廓的端点pts1 = np.float32(approx) # 轮廓四个端点的坐标pts2 = np.float32([[w, 0], [0, 0], [0, h], [w, h]]) # 正面图对应的四个端点坐标M = cv2.getPerspectiveTransform(pts1, pts2) # 创建透视图M矩阵tmp = cv2.warpPerspective(img, M, (w, h)) # 根据M矩阵做透视变换
cv2.imshow("img", img) # 展示原图
cv2.imshow("Top view", tmp) # 展示俯视图
cv2.waitKey() # 按下任何按键后
cv2.destroyAllWindows() # 释放所有窗体

结果如下:

在这里插入图片描述

cmath模块

除了前述 OpenCV 提供的用于对图像进行几何变换的方法外,借助 Python 中的 cmath模块也能让图像呈现特定的视觉效果。例如让图像呈现波浪效果等。

通过 Python 中的 cmath 模块就能够让图像呈现波浪效果。cmath 模块提供了数学函数在复数域上扩展的运算函数,这些函数允许复数、整数、浮点数等数据类型的数据输入,因此这些函数的返回值也都是复数。要特别注意的是,组成复数的实部和虚部都是浮点数。

这里要用到的是 cmath 模块中用于返回指定弧度的正弦值的 sin()方法

cmath.sin(x)
  • x: 与指定角度对应的弧度

在 cmath 模块中的 sin()方法中,还可以设置与正弦函数对应的正弦图像的振幅和波长。例如把一幅图像的列像素 col 作为弧度,设置与正弦函数对应的正弦图像的振幅为 20、波长为30的关键代码如下所示:

20 * cmath.sin(col/15) # 15是一半的波长

实例9: 呈现波浪效果的图像

import cv2
import numpy as np
import cmathimg = cv2.imread("rice.jpg") # 读取当前项目目录下的图像
shape = img.shape # 获取图像的行像素、列像素和通道数
rows = shape[0] # 获取图像的行像素
columns = shape[1] # 获取图像的列像素
channel = shape[2] # 获取图像的通道数
# 创建了一个行像素与图像的行像素相同,列像素与图像的列像素相同,具有3个通道的画布
canvas = np.zeros([rows, columns, channel], np.uint8)
for row in range(rows): # 遍历图像的行像素for col in range(columns): # 遍历图像的列像素# 20是波的振幅,15是一半的波长# 根据正弦函数计算每个像素点的横坐标移动后的位置i = row + 20 * cmath.sin(col/15)i = round(np.real(i))  # 将复数结果转为实数,并四舍五入if 0 <= i < rows:  # 如果移动后的像素点仍在画布范围内canvas[i, col] = img[row, col] # 将原图像的像素点存放到与画布对应的像素点上
cv2.imshow("wave", canvas) # 在一个名为“wave”的窗口中显示呈现波浪效果的图像
cv2.waitKey() # 通过按下键盘上的按键
cv2.destroyAllWindows() # 销毁正在显示的窗口

结果如下:

在这里插入图片描述

相关文章:

【OpenCV入门】第七部分——图像的几何变换

文章结构 缩放dsize参数实现缩放fx参数和fy参数实现缩放 翻转仿射变换平移旋转倾斜 透视cmath模块 缩放 通过resize()方法可以随意更改图像的大小比例&#xff1a; dst cv2.resize(src, dsize, fx, fy, interpolation)src&#xff1a; 原始图像dsize&#xff1a; 输出图像的…...

淘宝app商品详情原数据接口API(支持高并发请求/免费测试)

item_get_app-获得淘宝app商品详情原数据 一、引言 随着移动互联网的迅速发展&#xff0c;移动电商应用的需求也在不断增长。淘宝作为中国最大的电商平台之一&#xff0c;每天需要处理大量的商品数据和用户访问请求。为了提供更加优质的用户体验&#xff0c;淘宝开放了商品详…...

JS中的new操作符

文章目录 JS中的new操作符一、什么是new&#xff1f;二、new经历了什么过程&#xff1f;三、new的过程分析四、总结 JS中的new操作符 参考&#xff1a;https://www.cnblogs.com/buildnewhomeland/p/12797537.html 一、什么是new&#xff1f; 在JS中&#xff0c;new的作用是通过…...

文件编辑器、用户管理,嘎嘎学

打开文件 vim # 首先你先得下载这个插件 yum install -y vim vim 文件名 进入编辑模式 i #在光标所在处进入编辑模式 a #在当前光标后面进入编辑模式 o #在光标的下一行进入编辑模式 I #在光标所在处行首进入编辑模式 A #在光标所在处行尾进入编辑模式 O #在光标的上一…...

Java获取当前类名的两种方法

适用于非静态方法&#xff1a;this.getClass().getName() 适用于静态方法&#xff1a;Thread.currentThread().getStackTrace()[1].getClassName() 获取类名&#xff1a; 1、在类的实例中可使用this.getClass().getName();但在static method中不能使用该方法&#xff1b; 2、在…...

windows系统开机自启打开指定网页

windows系统开机自启打开指定网页 1、在电脑桌面右击新建快捷方式&#xff0c;输入想要开机打开的网址 2、点击下一步输入自己想要命名的名字 3、使用快捷键winR运行&#xff0c;输入shell:startup&#xff0c;点击确定 4、把在桌面创建快捷方式拉到启动文件夹里面 5、这样就完…...

Java-HashMap中put()方法是如何实现的,内含详细流程图

文章目录 Java中的HashMap什么是HashMap&#xff1f;对比其他Map中put()方法HashMap中put()方法使用示例 HashMap中put()源码解析手绘流程图实现原理源码探究&#xff08;JDK 1.8&#xff09; 设计put()的意义总结 Java中的HashMap 什么是HashMap&#xff1f; HashMap是Java中…...

kaggle赛后总结

1. 宽表 2.缺失值的处理方法 最简单粗暴的就是删除&#xff0c;这种情况是凡是有缺失值行数很少。均值替代。缺失值的行数比较多一点儿的时候&#xff0c;直接删除会影响样本数量&#xff0c;那就均值替代&#xff0c;或者中位数替代等方法。还有复杂的方法&#xff0c;把有缺…...

基于Vue前端框架构建BI应用程序

一、什么是Vue&#xff1f; Vue&#xff08;Vue.js&#xff09;是一个轻量级、高性能、可组件化的MVVM库。简而言之&#xff0c;是一个构建数据驱动的web界面的渐进式框架。它采用MVVM思想&#xff0c;通过数据双向绑定实现数据的动态渲染&#xff0c;同时也支持组件化的开发方…...

【文心一言】学习笔记

学习资料 《听说文心一言App霸榜了&#xff0c;那必须来一波全方位实测了》 情感陪伴&#xff1a;文心一言 App 可以充当用户的情感树洞&#xff0c;提供知心姐姐、【暖男】等角色扮演&#xff0c;为用户提供情绪疏导、情感分析、约会建议等服务。 1. 模型属性 【提示词工具…...

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…...

springboot web开发整合Freemarker 模板引擎

目录 Freemarker添加依赖配置文件ymlcontrollerhtml Freemarker 简介&#xff1a; FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具…...

Python 连接 SQL 数据库 -pyodbc

文章目录 使用 pyodbc 模块从 Python 代码连接到 SQL 数据库配置用于 pyodbc Python 开发的开发环境创建用于 pyodbc Python 开发的 SQL 数据库使用 pyodbc 连接到 SQL连接和查询数据 推荐阅读 在 Windows、Linux 或 macOS 上使用 Python 连接到 SQL 数据库&#xff0c;有几个可…...

Vue框架--Vue中的数据代理

下面,我们一起来说以下Vue中的数据代理。 1.Object.defineProperty()方法回顾 * Object.defineProperty()方法基本配置项 * value:指定设置对象内容的属性值 * enumerable:true, //控制属性是否可以枚举(也就是是否可以被遍历),默认值是false * writable:true, //控制属性是…...

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…...

python如何求两list的公共区域

如何求两list的公共区域 对于列表&#xff08;List&#xff09;&#xff0c;要求它们的公共区域&#xff0c;你可以使用列表推导式和集合交集的方法来计算。具体步骤如下&#xff1a; list1 [1, 2, 3, 4, 5] list2 [3, 4, 5, 6, 7]# 使用列表推导式获取列表的交集 common_e…...

SpringMVC中文乱码(request或response)前后端处理

前端处理&#xff1a; JSP : <%page pageEncoding"utf-8" %> HTML : <meta charset"UTF-8">后端处理&#xff1a; GET请求&#xff08;request&#xff09;乱码处理&#xff1a; <!-- Tomcat的sever.xml中添加配置&#xff1a;URIEncod…...

Redis面试题大全含答案

1.什么是Redis&#xff1f; 答&#xff1a;Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 它通常被称为数据结构服务器&#xff0c;因为值&#xff08;value&…...

stable diffusion实践操作-提示词-整体环境

系列文章目录 stable diffusion实践操作-提示词 文章目录 系列文章目录前言一、提示词汇总1.1 整体环境11.2 整体环境1 二 、总结 前言 本文主要收纳总结了提示词-整体环境。 一、提示词汇总 1.1 整体环境1 画质背景场景画风镜头[最高质量][透明背景][山][轮廓加深][正面视…...

Spring Aop--通知注解

一、环绕注解 环绕注解 环绕注解Aroud 注解描述AroundAround是Spring AOP中的一种通知类型&#xff0c;用于在目标方法执行前后进行环绕操作。它可以在方法调用前后增加额外的逻辑&#xff0c;例如日志记录、性能监控等。Around注解需要配合AspectJ表达式来指定切入点&#…...

说说CDN和负载均衡具体是怎么实现的

分析&回答 什么是 CDN CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络。 构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需…...

Leetcode107. 二叉树的层序遍历 II

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 输入&#xff1a;root [3,9…...

【广州华锐互动】VR党建多媒体互动展厅:随时随地开展党史教育

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中党建教育尤为受益。为了更好地传承红色基因&#xff0c;弘扬党的优良传统&#xff0c;广州华锐互动推出了VR党建多媒体互动展厅&#xff0c;让广大党员干部和人民群众通过现代科技手段&a…...

libdrm全解析三十九 —— 源码全解析(36)

接前一篇文章&#xff1a;libdrm全解析三十八 —— 源码全解析&#xff08;35&#xff09; 本文参考以下博文&#xff1a; DRM 驱动程序开发&#xff08;VKMS&#xff09; 特此致谢&#xff01; 前一篇文章讲解完了资源的释放流程中的drmModeRmFB()&#xff0c;本回讲解munma…...

【Interaction交互模块】AngularJointDrive角度关节驱动

文章目录 一、预设体位置二、案例&#xff1a;做一个“能开合的门” 1、在已建好的门框下&#xff0c;建门 2、设置参数 3、解决产生的问题 三、其它属性 一、预设体位置 交互模块——可控制物体——物理关节——角度关节驱动 二、案例&#xff1a;做一个“能…...

菜鸟教程《Python 3 教程》笔记 EX 01:命令行参数

菜鸟教程《Python 3 教程》笔记 EX 01&#xff1a;命令行参数 1 命令行参数1.1 基础用法1.2 getopt 模块1.2.1 getopt.getopt 方法1.2.2 getopt.gnu_getopt 方法1.2.3 Exception getopt.GetoptError1.2.4 exception getopt.error 笔记带有个人侧重点&#xff0c;不追求面面俱到…...

NLP(六十六)使用HuggingFace中的Trainer进行BERT模型微调

以往&#xff0c;我们在使用HuggingFace在训练BERT模型时&#xff0c;代码写得比较复杂&#xff0c;涉及到数据处理、token编码、模型编码、模型训练等步骤&#xff0c;从事NLP领域的人都有这种切身感受。事实上&#xff0c;HugggingFace中提供了datasets模块&#xff08;数据处…...

Rabbitmq消息积压问题如何解决以及如何进行限流

一、增加处理能力 优化系统架构、增加服务器资源、采用负载均衡等手段&#xff0c;以提高系统的处理能力和并发处理能力。通过增加服务器数量或者优化代码&#xff0c;确保系统能够及时处理所有的消息。 二、异步处理 将消息的处理过程设计为异步执行&#xff0c;即接收到消息…...

Lambda方法引用

1、体验方法引用 在使用Lambda表达式的时候&#xff0c;我们实际上传递进去的代码就是一种解决方案&#xff1a;拿参数做操作那么考虑一种情况&#xff1a;如果我们在Lanbda中所指定的操作方案&#xff0c;已经有地方存在相同方案&#xff0c;那是否还有必要再重复逻辑呢&#…...

TCP协议报文

前言 TCP/IP协议簇——打开虚拟世界大门中&#xff0c;已经给大家大致介绍了TCP/IP协议簇的分层。 TCP (Transmission Control Protocol)传输控制协议&#xff0c;在TCP/IP协议簇中&#xff0c;处于传输层。是为了在不可靠的互联网络&#xff08;IP协议&#xff09;中&#x…...