OpenCV图像的基本操作

news2025/1/10 20:18:06

图像的基本操作(Python)

素材图

P1:die.jpg

在这里插入图片描述

P2:cool.jpg

在这里插入图片描述

V:rabbit.mp4, 下载地址

在这里插入图片描述

读取展示-图像

import cv2

img_1 = cv2.imread('./die.jpg')  # default cv2.IMREAD_COLOR
print("die.jpg shape(imread default) : ", img_1.shape)  # 展示图像信息 (行,列,颜色通道数)(h,w,c)
cv2.imshow("die default", img_1)

img_2 = cv2.imread('./die.jpg', cv2.IMREAD_GRAYSCALE)  # 指定为灰度图
print("die.jpg shape(imread gray) : ", img_2.shape)  # 展示图像信息 (行,列,颜色通道数)(h,w,c)
cv2.imshow("die gray", img_2)
cv2.imwrite("./grayscale.jpg", img_2)  # 保存图像信息

img_3 = cv2.imread('./cool.jpg')  # default cv2.IMREAD_COLOR
print("cool.jpg shape(imread default) : ", img_3.shape)  # 展示图像信息 (行,列,颜色通道数)(h,w,c)
cv2.imshow("cool default", img_3)

cv2.waitKey(0)  # 单位是毫秒
cv2.destroyAllWindows()  # 释放所有窗口

在这里插入图片描述

cv2.imshow()

原型:cv2.imshow(winname, mat)

参数:

  • winname(窗口名称): 字符串,表示显示窗口的名称。
  • mat(图像矩阵): 要显示的图像矩阵,通常是一个NumPy数组。

返回值:

功能:

cv2.imshow 主要是用于显示图像,而不是播放视频。**当你使用 cv2.imshow 显示视频帧时,它只会显示当前帧,并不会按照视频的原速度播放。**你需要在代码中通过循环读取视频的帧,并将每一帧传递给 cv2.imshow,以模拟视频的播放效果。

注意: 如果两次imshow的winname相同的话,那将自动关闭前一个窗口。

cv2.waitKey()

原型:cv2.waitKey([delay])

参数:

  • delay(延迟时间): 表示等待时间的毫秒数,如果设置为0,表示无限等待用户输入。默认值是0。

返回值:

  • 返回按键的 ASCII 值(整数)。如果没有按键被按下,返回-1。

功能:

  • 等待用户按下键盘上的按键。
  • 在指定的延迟时间内等待用户输入,然后继续执行程序。

cv2.destroyAllWindows()

原型:cv2.destroyAllWindows()

参数:

返回值:

功能:

  • 关闭所有通过 cv2.namedWindow()cv2.imshow() 创建的窗口。通常在程序执行的最后调用这个函数,以确保在程序结束时关闭所有图形界面窗口,防止它们在程序退出后仍然保留。

cv2.imread()

原型:cv2.imread(filename [,flags])

参数:

  • filename(文件名): 要读取的图像文件的路径。
  • flags(标志): 可选参数,表示如何读取图像。默认值是 cv2.IMREAD_COLOR,表示以彩色图像的形式读取。可以使用以下常量:
    • cv2.IMREAD_COLOR: 以彩色图像形式读取(默认值),注:OpenCV读取的图像是BGR格式,而非RGB
    • cv2.IMREAD_GRAYSCALE: 以灰度图像形式读取。
    • cv2.IMREAD_UNCHANGED: 读取包括 alpha 通道在内的所有图像信息。

返回值:

  • 读取的图像数据,以 NumPy 数组的形式表示。

功能:

  • 读取指定路径下的图像文件,并将其加载到一个 NumPy 数组中,以便在程序中进行处理和分析。

cv2.imwrite()

原型: cv2.imwrite(filename, img [,params])

参数:

  • filename(文件名): 要写入的目标文件的路径。
  • img(图像数据): 要写入文件的图像数据,通常是一个 NumPy 数组。
  • params(可选参数): 写入文件时的附加参数。可以指定图像质量、压缩格式等。

返回值:

  • 如果成功写入文件,则返回 True;否则返回 False

功能:

  • 将图像数据写入指定的文件。

读取展示-视频

import cv2

# 打开视频文件
cap = cv2.VideoCapture('./rabbit.mp4')

# 检查视频是否成功打开
if not cap.isOpened():
    print("Error: 无法打开视频文件.")
    opn = 0
else:
    opn = 1

while opn:
    # 读取视频帧
    ret, frame = cap.read()

    # 检查是否成功读取帧(视频播放完成退出)
    if not ret:
        print("Error: 无法读取帧.")
        break

    # 转换为灰度帧
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 在窗口中显示帧
    cv2.imshow('Video Player', gray)

    # 检查用户是否按下了 'q' 键,如果是则退出循环
    if cv2.waitKey(25) & 0xFF == 27:
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

cv2.VideoCapture()

原型:cv2.VideoCapture([filename or index, apiPreference])

参数:

  • filename(可选): 视频文件的路径。
  • index(可选): 摄像头设备的索引号,用于选择要使用的摄像头。通常从0开始递增。
  • apiPreference(可选): 指定视频捕获 API 的首选项。可以是 cv2.CAP_ANYcv2.CAP_V4L2cv2.CAP_FFMPEG 等。

功能:

  • 打开一个视频文件、摄像头或其他图像来源,准备读取帧。
  • 提供方法用于从视频源中读取帧,获取视频的参数等信息。

返回值:

  • VideoCapture 对象:一个用于从视频源读取帧的对象。下面介绍该对象常用属性:

    1. read()

      • 读取视频的下一帧。
      • 返回一个布尔值 ret,表示帧是否成功读取,以及帧的图像数据frame(视频帧的 NumPy 数组)。
      ret, frame = cap.read()
      
    2. get(propId)

      • 获取视频的属性值,例如帧的宽度、高度、帧速率等。
      • propId 是用于指定要获取的属性的标识符。
      width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
      height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
      
    3. set(propId, value)

      • 设置视频的属性值,例如帧的宽度、高度、帧速率等。
      • propId 是用于指定要设置的属性的标识符,value 是要设置的属性值。
      cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
      cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
      
    4. release()

      • 释放 VideoCapture 对象占用的资源,关闭视频源。
      cap.release()
      
    5. isOpened()

      • 检查 VideoCapture 对象是否成功打开了视频源。
      if not cap.isOpened():
          print("Error: Could not open video source.")
      

cv2.cvtColor()

原型:cv2.cvtColor(src, code)

参数:

  • src(源图像): 要进行颜色空间转换的输入图像,通常是一个 NumPy 数组。
  • code(颜色空间转换代码): 指定颜色空间转换的方式,如 cv2.COLOR_BGR2GRAY 表示将 BGR 彩色图转换为灰度图。
  • 还有两个可选参数,用于设置输出图像的尺寸、深度、通道数,这里不进行介绍。

返回值:

  • 转换后的图像,仍是一个 NumPy 数组。

功能:

  • 将输入图像从一个颜色空间转换到另一个颜色空间。

其他:(关于code的其他可选项)

  1. BGR 转灰度:cv2.COLOR_BGR2GRAY
  2. BGR 转HSV:cv2.COLOR_BGR2HSV
  3. BGR 转RGB:cv2.COLOR_BGR2RGB
  4. 灰度转BGR:cv2.COLOR_GRAY2BGR
  5. RGB 转BGR:cv2.COLOR_RGB2BGR

ROI(感兴趣的范围——裁剪)

图像数据的表示方式:

用 “:” 表示区间(左闭右开)

import cv2
img = cv2.imread('./die.jpg')
print(img.shape)  #(40, 240, 3)

# 取三维矩阵的前一行、前两列、深度为all
print(img[0:1, 0:2], "\n")
# [[[40 39 83]     [[[BGR][BGR]  ]  ]
#   [39 38 82]]]   三维 —— 图像(r * w) * BGR(h = 3)

# 取三维矩阵的前一行、前两列、深度为0
print(img[0:1, 0:2, 0], "\n")
# [[40 39]]      二维 (r * w)  仅显示BGR其中之一(B)

print(img[0:1, 0:2, 1], "\n")
# [[39 38]]        仅显示(G)

print(img[0:1, 0:2, 2], "\n")
# [[83 82]]        仅显示(R)

查看图像指定区域(imshow时可实现裁剪效果):

import cv2
img = cv2.imread('./die.jpg')
print(img.shape)

cv2.imshow("image", img)
cv2.imshow("cut", img[50:150, 0:200])

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

提取/合并 图像的R、G、B

import cv2

img = cv2.imread('./die.jpg')

# 提取   如果直接show相当于灰度图像,把颜色值当作亮度
img_B = img[:, :, 0]
img_G = img[:, :, 1]
img_R = img[:, :, 2]
# 合并   合并时要注意维度保持一致
img_T = cv2.merge((img_B, img_G, img_R))

在这里插入图片描述

置空通道 (e.g只保留R通道)

import cv2

img = cv2.imread('./die.jpg')

img_T = img.copy()

img_T[:, :, 0] = 0  # 置空 B 通道
img_T[:, :, 1] = 1  # 置空 G 通道

cv2.imshow("img_T", img_T)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

cv2.merge()

原型:cv2.merge(mv[, dst])

参数:

  • mv:包含要合并的图像通道的序列(例如,一个包含三个通道的元组或列表)。
  • dst:输出图像,可选。

返回值:

如果指定了 dst 参数,则返回输出图像 dst;否则,返回合并后的图像。

功能:

cv2.merge 函数用于将多个单通道的图像合并成一个多通道的图像。通常,在图像处理中,图像被拆分为单个通道进行处理,然后再合并回来。mv 参数是一个包含要合并的图像通道的序列,通常是一个包含多个单通道图像的元组或列表。在合并时要注意每个通道的尺寸和数据类型保持一致,并注意通道的顺序。

关于dst参数

手动指定 dst 和使用返回值接收的主要区别在于对输出图像的处理和内存管理

手动指定 dst

  • 如果你手动指定了 dst,则你需要提前创建一个多通道的数组,用于存储合并后的结果。这样可以避免在函数内部创建新的数组,有助于更好地控制内存的分配和释放。
  • 通过手动指定 dst,你可以在函数调用之后继续使用这个数组,而不需要将它的内容复制到其他数组中。

使用返回值接收:

  • 如果你使用返回值接收合并后的结果,那么函数会在内部创建一个新的多通道数组,并将合并后的图像存储在其中。这个新数组将作为函数的返回值返回。
  • 使用返回值接收合并后的图像时,你不需要提前创建输出数组,但需要注意新数组的内存管理。你可能需要确保及时释放不再需要的内存,以避免内存泄漏。

在实际应用中,选择手动指定 dst 还是使用返回值接收通常取决于对内存和代码结构的特定需求。如果你有特定的内存管理需求或者想要更好地控制输出数组的生命周期,那么手动指定 dst 可能更为合适。否则,使用返回值接收通常更为简便。

缩放&融合

import cv2

img1 = cv2.imread('./die.jpg')
img2 = cv2.imread('./cool.jpg')

# 两张图片尺寸不一致不能进行计算(融合)
print(img1.shape)  # (240, 240, 3)
print(img2.shape)  # (1000, 1000, 3)

img2_T = cv2.resize(img2, (240, 240))

res = cv2.addWeighted(img1, 0.4, img2_T, 0.6, 0)

cv2.imshow("blend", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

按缩放因子进行scale

import cv2

img = cv2.imread('./die.jpg')
print(img.shape)  # (240, 240, 3)

# 将y坐标拉伸2倍数,x不变
img_T = cv2.resize(img, (0, 0), fx=1, fy=2)
print(img.shape)  # (240, 240, 3)

cv2.imshow("img", img)
cv2.imshow("scale", img_T)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

cv2.resize()

原型:cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

参数:

  • src: 输入图像。

  • dsize: 输出图像的大小,可以是元组 (width, height) 或者 None

  • dst: 输出图像,可选。

  • fx: 沿水平轴的缩放因子,可选。

  • fy: 沿垂直轴的缩放因子,可选。

  • interpolation: 插值方法,用于图像的缩放。默认为 cv2.INTER_LINEAR

    常见的插值方法包括:

    • cv2.INTER_NEAREST: 最近邻插值
    • cv2.INTER_LINEAR: 线性插值(默认)
    • cv2.INTER_CUBIC: 三次样条插值
    • cv2.INTER_AREA: 区域插值

返回值:

  • 返回缩放后的图像。

功能:

  • 该函数用于调整图像大小,可以进行放大或缩小。可以通过指定输出图像的大小 (dsize) 或者缩放因子 (fx, fy) 来控制缩放的程度

cv2.addWeighted()

函数原型:cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

参数:

  • src1:第一个输入图像。
  • alphasrc1 的权重。
  • src2:第二个输入图像。
  • betasrc2 的权重。
  • gamma:添加到每个和的标量值,用于调整输出图像的亮度。
  • dst:输出图像,可选。
  • dtype:输出图像的数据类型,可选。

返回值:

  • 如果指定了 dst 参数,则返回输出图像 dst;否则,返回合并后的新图像。

功能:

  • cv2.addWeighted 函数用于将两个图像线性组合,即按照一定的权重相加。具体而言,它的计算公式为:

d s t = s r c 1 × a l p h a + s r c 2 × b e t a + g a m m a dst=src1×alpha+src2×beta+gamma dst=src1×alpha+src2×beta+gamma

  • 这个函数在图像混合、图像融合、对比度调整等方面非常有用。例如,可以使用 cv2.addWeighted 将两个图像按照一定的比例融合,调整图像的对比度和亮度。

数值计算

cv2.add()

img1 = img1 + 5   # 每个像素值都增加了5
imgT = img2 + img1  # img1 的每个像素值都与相应位置上的 img2 的像素值相加

# 因为每个值都是uint8,所以可能会出现越界溢出的情况(%256)
# cv2.add()  可以实现饱和截断(溢出时会保持在255)
cv2.add(img1,img2)

matplotlib.pyplot绘制子图

import cv2
import matplotlib.pyplot as plt
import numpy as np                # 暂时没用到

# 读取图像
img1 = cv2.imread('./die.jpg')
img2 = cv2.imread('./grayscale.jpg')
img3 = cv2.imread('./cool.jpg')

# 使用Matplotlib显示不同边界填充方式的图像(221: 2*2的网格的第1个位置)
plt.subplot(221), plt.imshow(img1), plt.title('die')
plt.subplot(222), plt.imshow(img2), plt.title('grayscale')
plt.subplot(223), plt.imshow(img3), plt.title('cool')

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

边界填充

import cv2
import matplotlib.pyplot as plt
import numpy as np                # 暂时没用到

# 读取图像
img = cv2.imread('./die.jpg')

# 定义上、下、左、右填充的大小
top_size, bottom_size, left_size, right_size = (70, 70, 70, 70)

# 使用不同的边界填充方式生成新的图像
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT, value=0)

# 使用Matplotlib显示不同边界填充方式的图像(231: 2*3的网格的第1个位置)
plt.subplot(231), plt.imshow(img), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant), plt.title('CONSTANT')

# 显示图像
plt.show()

# 关闭所有OpenCV窗口
cv2.destroyAllWindows()

在这里插入图片描述

cv2.copyMakeBorder()

函数原型:cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])

参数:

  • src:输入图像。
  • topbottomleftright:指定在每个边界添加的像素数。
  • borderType
    • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
    • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
    • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
    • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
    • BORDER_CONSTANT:常量法,常数值填充。
  • dst:输出图像,可选。
  • value:当 borderTypecv2.BORDER_CONSTANT 时使用的边界常数。

返回值:

  • 如果指定了 dst 参数,则返回输出图像 dst;否则,返回添加边界后的新图像。

功能:

  • cv2.copyMakeBorder 函数用于在图像的四个边界上添加边界。你可以指定要添加的像素数以及边界的类型。不同的 borderType 选项会导致不同的边界填充方式。

  • 这个函数在图像处理中常用于图像扩展、填充以及处理边界条件的情况,例如在进行卷积运算时。

      

Numpy

.shape

shapeNumPy 数组的一个属性。在 NumPy 中,shape 用于获取数组的维度信息。

示例:array.shape

返回值:

  • 一个元组(tuple),表示数组的维度。

功能:

  • 提供数组的维度信息,以元组的形式返回。
  • 对于二维数组,返回的元组包含两个元素,表示行数和列数;对于三维数组,包含三个元素,以此类推。

.copy()

  在NumPy中,copy() 方法用于创建数组的副本(复制)。这个方法返回一个新的数组对象,该对象是原始数组的完整副本,包括数据和属性。这意味着对新数组的任何更改都不会影响原始数组,反之亦然。

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

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

相关文章

26.各品类中商品价格的中位数(ceil与floor函数)

题目: 题解: --这道题主要考察中位数的取法 SELECT category_id,cast(sum(price)/count(1) as DECIMAL(16,2)) medprice from( SELECTcategory_id,price,rn,max(rn)over(partition by category_id) max_rn from(SELECTcategory_id,price,row_number() …

音频格式之AAC:(3)AAC编解码原理详解

系列文章目录 音频格式的介绍文章系列: 音频编解码格式介绍(1) ADPCM:adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 :音频格式之MP3:(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 :音频格式之MP3&#x…

工业交换机的OAM功能有哪些?

OAM(Operations, Administration, and Maintenance)是工业交换机中的一种功能,用于管理和维护网络的操作、管理和维护任务。它提供了以下功能: 1. 连通性检测:OAM可以监测和检测交换机与其他网络设备之间的连通性&…

如何在外远程访问家中本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后,很多用户对于如何在外在公网环境下的远程访问威联通NAS…

python环境安装sklearn及报错解决

安装 如刚开始安装&#xff0c;还未遇到问题请直接从重新安装库开始看&#xff0c;如果遇到报错&#xff0c;从问题开始看 问题 python安装sklearn报错 &#xff0c;报错信息如下 File "<stdin>", line 1pip install scikit-learn^ SyntaxError: invalid s…

OSS上传下载乱码问题

配置headers&#xff1a; "Content-Disposition": attachment; filename*UTF-8${encodeURIComponent(file.file.name)},

QT5.14.2开发的Mysql8.0系统安装部署过程

最近在Windows 11 64位系统下使用QT5.14.2开发了套系统、使用了MYSQL8.0数据库&#xff0c;项目使用mingw-64编译器进行编译&#xff0c;编译完成后使用windeployqt进行发布&#xff0c;并制作安装包&#xff0c;拷贝到工控机Windows10 64位系统上进行安装运行。本文记录下安装…

【VBA代码解决方案】md文档转Word后,全自动转换为标准的Word公式格式

【VBA解决方案】全自动将Word中的文本公式转换为标准公式 写在最前面VBA代码全自动方法将md文档导出为word代码如何运行VBA代码注意事项 一些如何实现的回忆记录步骤解析手动将文本转换为Word公式代码逻辑步骤设想代码解析代码解释总结 其他背景介绍应用场景VBA脚本介绍如何使用…

LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论

亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论&#xff0c;这些评论是反映消费者对产品情绪的关键接触点。但是&#xff0c;企业如何从庞大的数据库获得有意义的见解&#xff1f; 我们可以使用LlamaIndex将SQL与RAG&#xff08;Retrieval Augmented Generation&#x…

Linux--基础开发工具篇(1)(yum)

1.Linux 软件包管理器 yum 1.1yum是什么&#xff1f;什么是软件包&#xff1f; yum是什么&#xff1f; yum是一个软件下载安装管理的一个客户端&#xff0c;就如小米应用商店&#xff0c;华为应用商城。 Linux中软件包可能有依赖关系--yum会帮助我们解决依赖关系的问题。 什么是…

eNSP学习——利用单臂路由实现VLAN间路由

目录 原理概述 实验内容 实验目的 实验步骤 实验拓扑 实验编址 配置步骤 创建VLAN并配置Access、Trunk接口 配置路由器子接口和IP地址 配置路由器子接口封装VLAN 测试结果 原理概述 在以太网中&#xff0c;通常会使用VLAN技术隔离二层广播域来减少广播的影响&#…

MacOS平台翻译OCR软件,双管齐下,还可自定义插件,为其添砖加瓦!

小编昨天为大家分享了Windows系统下的一款功能强大且免费的 OCR 开源工具 Umi-OCR。 今天则为大家推荐一款 MacOS系统下的一款 翻译 OCR 多功能双管齐下的桌面应用软件 Bob。这款软件虽然也上线了GitHub&#xff0c;但它不是一款开源软件&#xff0c;仓库只是作者为了用户反馈…

【C/C++】C/C++编程——第一个 C++ 程序:HelloWorld

第一个 C 程序&#xff1a;HelloWorld 大家好&#xff0c;我是 shopeeai&#xff0c;也可以叫我虾皮&#xff0c;中科大菜鸟研究生。昨天我们成功搭建好了 C 的开发环境&#xff0c;今天我们来介绍一下第一个 C 程序,打印一个"hello world"。首先我们先贴一下示例代…

从零实现一套低代码(保姆级教程)【后端服务】 --- 【21】实现数据库的动态建表等接口

摘要 在前面的两篇文章&#xff0c;我们主要是通过Upload组件和Image组件&#xff0c;真正的做到了设计器和后端服务之间的数据传递。 有了这个例子&#xff0c;应该比较清楚&#xff0c;对于低代码项目的服务端&#xff0c;它主要做的是一个抽象的数据存储。 因为正常做开发…

Tomcat运维

目录 一、Tomcat简介 二、系统环境说明 1、关闭防火墙&#xff0c;selinux 2、安装JDK 3、安装Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍&#xff08;conf&#xff09; 4、Tomcat的管理 四、Tomcat 配置管理页面(了解) …

分享 7 个最佳短信恢复应用程序,帮助恢复已删除短信

对于 Android 用户来说&#xff0c;丢失重要短信可能是一种令人沮丧的经历。幸运的是&#xff0c;有许多短信恢复应用程序可以帮助恢复丢失或删除的短信。在本文中&#xff0c;我们将与您分享 7 个最佳短信恢复应用程序&#xff0c;并帮助您找到可用于恢复已删除消息的最佳应用…

新能源+储能新模式 新创新

新型储能技术的兴起主要原因是&#xff1a;187.210.98.782 能源需求增长&#xff1a;随着全球人口和经济的增长&#xff0c;对能源的需求量也在不断上升&#xff0c;传统的化石燃料资源日益减少&#xff0c;因此需要开发新型的可再生能源和储能技术。 环境保护要求&#xff1a…

2024年生物技术与医学科学国际学术研讨会(ISBAMS 2024)

2024年生物技术与医学科学国际学术研讨会&#xff08;ISBAMS 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.isbams.com会议地址&#xff1a;上海召开日期&#xff1a;2024/2/20截稿日期&#xff1a;2024/2/10 &#xff08;先投稿&#xff0c;先审核&#xff0c;先…

股票交易维度和概念

股票&#xff1a;股份公司为筹集资金而发行给各个股东作为持股凭证并借以取得股息和红利的一种有价证券 好处&#xff1a;分红、送股配股、交易收益、本金少、易变现、避免货币贬值 金融标的投资风险与收益 股票分类 蓝筹股 经营业绩长期稳定增长的大公司&#xff0c;一般是…

数据分析 - python 数据处理

数据处理 去除重复数据 # 删除重复值 保留重复行 第一行的数据 data.drop_duplicates(inplaceTrue, keepfirst)数据格式转化 日期格式化 data[order_date] pd.to_datetime(data[order_dt], format%Y%m%d)data[销售时间] pd.to_datetime(data[销售时间]) # 交货时间 销售…