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

我的Opencv

1.安装Opencv

pip install opencv-python

2.读取图像

 

3.写图像

4. 显示图像

5.waitKey() 

6.读视频并播放视频

7.写视频

8. 获取摄像头视频

 9.色彩转换

# BGR to GRAY
imgGRAY = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# BGR to RGB
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# BGR to HSV
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# BGR to YCrCb (also known as YCC)
imgYCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

10.图像变换

cv2.resize()

函数名称:
cv2.resize

函数参数讲解:

  • src: 输入图像。
  • dsize: 输出图像的大小。可以是 (width, height) 的元组形式。如果设置为 (0, 0),则必须提供 fx 和 fy
  • fx: 沿着 x 轴(水平方向)的缩放因子。当 dsize 设置为 (0, 0) 时有效。
  • fy: 沿着 y 轴(垂直方向)的缩放因子。当 dsize 设置为 (0, 0) 时有效。
  • interpolation: 插值方法。常用的有 cv2.INTER_AREA(用于缩小)、cv2.INTER_CUBIC(用于放大,较慢但效果好)、cv2.INTER_LINEAR(默认,适用于所有情况)。

示例代码:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 缩放到指定大小
resized_img = cv2.resize(img, (800, 600), interpolation=cv2.INTER_LINEAR)# 按比例缩放
scaled_img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

cv2.flip()

函数名称:
cv2.flip

函数参数讲解:

  • src: 输入图像。
  • flipCode: 翻转方向标志。0 表示沿 x 轴翻转(上下翻转),1 表示沿 y 轴翻转(左右翻转),-1 表示沿 x 轴和 y 轴同时翻转(对角线翻转)。

示例代码:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 上下翻转
flipped_img_vertical = cv2.flip(img, 0)# 左右翻转
flipped_img_horizontal = cv2.flip(img, 1)# 对角线翻转
flipped_img_both = cv2.flip(img, -1)

cv2.warpAffine 平移、缩放、旋转

函数名称:
cv2.warpAffine

函数参数讲解:

  • src: 输入图像。
  • M: 2x3 变换矩阵。
  • dsize: 输出图像的大小 (width, height)
  • flags: 插值方法,默认为 cv2.INTER_LINEAR
  • borderMode: 边界填充方式,默认为 cv2.BORDER_CONSTANT
  • borderValue: 如果边界模式是 cv2.BORDER_CONSTANT,则使用的边界颜色,默认为黑色。

示例代码:

平移变换:

import cv2
import numpy as np# 加载图像
img = cv2.imread('image.jpg')# 定义平移矩阵
tx, ty = 100, 50  # x轴和y轴上的平移量
M_translation = np.float32([[1, 0, tx], [0, 1, ty]])# 应用平移
translated_img = cv2.warpAffine(img, M_translation, (img.shape[1], img.shape[0]))

 缩放变换:

# 定义缩放矩阵
fx, fy = 0.5, 0.5  # 缩放比例
M_scaling = np.float32([[fx, 0, 0], [0, fy, 0]])# 应用缩放
scaled_img = cv2.warpAffine(img, M_scaling, (int(w * fx), int(h * fy)))

旋转变换:

# 获取图像中心点
(h, w) = img.shape[:2]
center = (w // 2, h // 2)# 定义旋转矩阵
angle = 45  # 旋转角度
scale = 1.0  # 缩放比例
M_rotation = cv2.getRotationMatrix2D(center, angle, scale)# 应用旋转
rotated_img = cv2.warpAffine(img, M_rotation, (w, h))

三点仿射变换

函数名称:
cv2.getAffineTransform

函数参数讲解:

  • pts1: 输入图像中的三个点坐标。
  • pts2: 输出图像中对应的三个点坐标。

示例代码:

import cv2
import numpy as np# 加载图像
img = cv2.imread('image.jpg')# 定义输入和输出图像中的三个点
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])# 计算仿射变换矩阵
M_affine = cv2.getAffineTransform(pts1, pts2)# 应用仿射变换
affine_transformed_img = cv2.warpAffine(img, M_affine, (img.shape[1], img.shape[0]))

透视变换

函数名称:
cv2.getPerspectiveTransform

函数参数讲解:

  • src: 输入图像中的四个点坐标。
  • dst: 输出图像中对应的四个点坐标。

示例代码:

import cv2
import numpy as np# 加载图像
img = cv2.imread('image.jpg')# 定义输入和输出图像中的四个点
pts_src = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts_dst = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])# 计算透视变换矩阵
M_perspective = cv2.getPerspectiveTransform(pts_src, pts_dst)# 应用透视变换
perspective_transformed_img = cv2.warpPerspective(img, M_perspective, (300, 300))

11.图像平滑滤波

cv2.blur()

函数名称:
cv2.blur

操作介绍:
均值滤波(Mean Filtering)是一种简单的线性滤波器,它通过计算图像中每个像素邻域的平均值来平滑图像。这种滤波方法有助于减少图像中的高斯噪声,但可能会导致边缘模糊。均值滤波总是进行归一化处理,即每个像素的贡献是相等的。

函数参数介绍:

  • src: 输入图像。
  • ksize: 均值滤波器的尺寸 (width, height)。通常是一个奇数的正方形,例如 (3, 3) 或 (5, 5)
  • anchor: 锚点,默认是中心点 (-1, -1),表示内核的中心作为锚点。可以指定其他位置来改变滤波器的行为。
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 应用均值滤波
mean_filtered_img = cv2.blur(img, (5, 5))# 显示结果
cv2.imshow('Mean Filtered Image', mean_filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.boxFilter()

函数名称:
cv2.boxFilter

操作介绍:
方框滤波(Box Filter)也是一种简单的线性滤波器,它通过计算图像中每个像素邻域的平均值来平滑图像。与均值滤波不同的是,方框滤波允许在计算平均值时考虑边界外的像素,这可以通过设置参数来控制。方框滤波对于减少噪声和模糊化图像非常有用。

函数参数介绍:

  • src: 输入图像。
  • ddepth: 输出图像的深度。如果为 -1,则输出图像将具有与输入图像相同的深度。
  • ksize: 方框滤波器的尺寸 (width, height)。通常是一个奇数的正方形,例如 (3, 3) 或 (5, 5)
  • normalize: 如果为 True,则滤波器会进行归一化,即除以核大小的面积;如果为 False,则不会进行归一化,这相当于对每个像素应用了一个常量加权。
  • anchor: 锚点,默认是中心点 (-1, -1),表示内核的中心作为锚点。可以指定其他位置来改变滤波器的行为。
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 应用方框滤波
box_filtered_img = cv2.boxFilter(img, -1, (5, 5), normalize=True)# 显示结果
cv2.imshow('Box Filtered Image', box_filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.GaussianBlur()

函数名称:
cv2.GaussianBlur

操作介绍:
高斯滤波(Gaussian Filtering)是一种非均匀的线性滤波器,它使用高斯分布作为权重对邻域内的像素进行加权平均。高斯滤波在去除高斯噪声方面效果很好,同时尽量保留图像的边缘信息。高斯滤波器的权重取决于距离中心像素的距离,离得越近的像素权重越大,离得远的像素权重越小。

函数参数介绍:

  • src: 输入图像。
  • ksize: 高斯滤波器的尺寸 (width, height)。通常是一个奇数的正方形,例如 (3, 3) 或 (5, 5)。如果设置为 (0, 0),则根据 sigmaX 自动确定。
  • sigmaX: 沿 X 轴方向的标准差。如果设置为 0,则从 ksize 计算得出。
  • sigmaY: 沿 Y 轴方向的标准差。如果设置为 0,则等于 sigmaX
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 应用高斯滤波
gaussian_blurred_img = cv2.GaussianBlur(img, (5, 5), 0)# 显示结果
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.medianBlur()

函数名称:
cv2.medianBlur

操作介绍:
中值滤波(Median Filtering)是一种非线性滤波器,它通过替换每个像素值为其邻域内的中值来平滑图像。中值滤波对于去除椒盐噪声特别有效,因为它能够很好地保护图像的边缘和细节,而不会像均值或高斯滤波那样导致边缘模糊。

函数参数介绍:

  • src: 输入图像。
  • ksize: 中值滤波器的尺寸,必须是大于1的奇数,如 35 等。

代码示例:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 应用中值滤波
median_filtered_img = cv2.medianBlur(img, 5)# 显示结果
cv2.imshow('Median Filtered Image', median_filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.bilateralFilter()

函数名称:
cv2.bilateralFilter

操作介绍:
双边滤波(Bilateral Filtering)是一种高级的非线性滤波器,它不仅考虑了空间邻近度(即像素之间的距离),还考虑了像素强度差异(即颜色或灰度值)。因此,双边滤波能够在保持边缘的同时有效地减少噪声。它适用于需要保持图像特征的场景,如图像增强、卡通效果生成等。

函数参数介绍:

  • src: 输入图像。
  • d: 每个像素领域直径,如果为非正值,则从 sigmaSpace 计算。
  • sigmaColor: 颜色空间的标准差,较大的值意味着更远的颜色也会被混合到一起,产生更大的半相等颜色区域。
  • sigmaSpace: 坐标空间的标准差(以像素为单位),较大的值意味着更远的像素也会被混合到一起,只要它们的颜色足够接近。如果 d > 0,它指定了邻域大小且不需要使用 sigmaSpace

代码示例:

import cv2# 加载图像
img = cv2.imread('image.jpg')# 应用双边滤波
bilateral_filtered_img = cv2.bilateralFilter(img, 9, 75, 75)# 显示结果
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.filter2D()

函数名称:
cv2.filter2D

操作介绍:
2D卷积滤波(2D Convolution Filtering)是一种通用的滤波方法,它允许用户定义自定义的卷积核(kernel)来对图像进行滤波。卷积核可以是任何大小的矩阵,并且可以根据特定的应用需求设计。2D卷积滤波广泛应用于各种图像处理任务,如边缘检测、锐化、模糊等。

函数参数介绍:

  • src: 输入图像。
  • ddepth: 输出图像的深度。如果为 -1,则输出图像将具有与输入图像相同的深度。
  • kernel: 卷积核(滤波器),一个二维数组。
  • anchor: 锚点,默认是中心点 (-1, -1),表示内核的中心作为锚点。可以指定其他位置来改变滤波器的行为。
  • delta: 可选偏移量,添加到滤波后的图像上,默认为 0
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2
import numpy as np# 加载图像
img = cv2.imread('image.jpg')# 定义自定义卷积核
kernel = np.ones((5, 5), np.float32) / 25# 应用2D卷积滤波
convoluted_img = cv2.filter2D(img, -1, kernel)# 显示结果
cv2.imshow('2D Convolved Image', convoluted_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

12.阈值处理

cv2.threshold()

函数名称:
cv2.threshold

操作介绍:
全局阈值处理是一种将图像转换为二值图像的简单方法,它根据一个全局阈值来决定每个像素是属于前景(白色)还是背景(黑色)。OpenCV提供了多种全局阈值处理的方法,包括二值化、反二值化、截断、超阈值和低阈值处理。这些方法适用于不同的应用场景,如文档扫描、字符识别等。

函数参数介绍:

  • src: 输入图像,通常是一个灰度图像。
  • thresh: 阈值,用于比较图像中的像素值。
  • maxval: 当像素值超过(或在某些情况下低于)阈值时应用的最大值。
  • type: 阈值处理类型,可以是以下之一:
    • cv2.THRESH_BINARY: 二值化阈值处理,如果像素值大于阈值,则设为 maxval,否则设为 0
    • cv2.THRESH_BINARY_INV: 反二值化阈值处理,如果像素值大于阈值,则设为 0,否则设为 maxval
    • cv2.THRESH_TRUNC: 截断阈值处理,如果像素值大于阈值,则设为阈值,否则保持不变。
    • cv2.THRESH_TOZERO: 超阈值处理,如果像素值大于阈值,则设为 0,否则保持不变。
    • cv2.THRESH_TOZERO_INV: 低阈值处理,如果像素值小于阈值,则设为 0,否则保持不变。

代码示例:

import cv2# 加载图像并转换为灰度
img = cv2.imread('image.jpg', 0)# 二值化阈值处理
ret, binary_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# 反二值化阈值处理
ret, binary_inv_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)# 截断阈值处理
ret, trunc_img = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)# 超阈值处理
ret, tozero_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)# 低阈值处理
ret, tozero_inv_img = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)# 显示结果
cv2.imshow('Binary Image', binary_img)
cv2.imshow('Binary Inv Image', binary_inv_img)
cv2.imshow('Trunc Image', trunc_img)
cv2.imshow('ToZero Image', tozero_img)
cv2.imshow('ToZero Inv Image', tozero_inv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.adaptiveThreshold()

函数名称:
cv2.adaptiveThreshold

操作介绍:
自适应阈值处理是一种改进的全局阈值处理方法,它不是使用一个固定的全局阈值,而是根据图像的不同区域动态地调整阈值。这对于光照不均匀或复杂背景的图像非常有用。自适应阈值处理有两种常用的方法:均值法和高斯加权法。

函数参数介绍:

  • src: 输入图像,通常是一个灰度图像。
  • maxValue: 当像素值超过(或在某些情况下低于)计算出的阈值时应用的最大值。
  • adaptiveMethod: 自适应阈值计算方法,可以是以下之一:
    • cv2.ADAPTIVE_THRESH_MEAN_C: 使用邻域内像素的平均值作为阈值。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C: 使用邻域内像素的加权和(高斯窗口)作为阈值。
  • thresholdType: 阈值处理类型,通常是 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV
  • blockSize: 邻域大小(奇数),用于计算阈值。
  • C: 从计算出的平均值或加权和中减去的常数。

代码示例:

import cv2# 加载图像并转换为灰度
img = cv2.imread('image.jpg', 0)# 自适应阈值处理(均值法)
adaptive_mean_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)# 自适应阈值处理(高斯加权法)
adaptive_gaussian_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)# 显示结果
cv2.imshow('Adaptive Mean Image', adaptive_mean_img)
cv2.imshow('Adaptive Gaussian Image', adaptive_gaussian_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

迭代阈值处理(Otsu's Binarization)

函数名称:
cv2.threshold with cv2.THRESH_OTSU

操作介绍:
迭代阈值处理,特别是大津法(Otsu's Method),是一种自动确定最佳阈值的方法。它通过最大化类间方差来找到最佳的二值化阈值,特别适合于双峰直方图的图像。大津法可以在 cv2.threshold 函数中通过添加 cv2.THRESH_OTSU 标志来实现。

函数参数介绍:

  • src: 输入图像,通常是一个灰度图像。
  • thresh: 初始阈值,当使用 cv2.THRESH_OTSU 时,这个值会被忽略。
  • maxval: 当像素值超过(或在某些情况下低于)阈值时应用的最大值。
  • type: 阈值处理类型,通常是 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV,并且需要加上 cv2.THRESH_OTSU

代码示例:

13.图像边缘检测 

cv2.Sobel()

函数名称:
cv2.Sobel

操作介绍:
Sobel边缘检测是一种基于一阶导数的梯度算子,用于计算图像中每个像素点的水平和垂直方向上的梯度。Sobel算子通过一个3x3的卷积核来检测图像中的边缘。它对噪声有一定的抑制作用,并且能够突出图像中的高梯度区域,即边缘。Sobel算子可以分别计算X轴和Y轴方向的梯度,也可以同时计算两个方向的梯度。

函数参数介绍:

  • src: 输入图像,通常是灰度图像。
  • ddepth: 输出图像的深度,通常为 -1 表示与输入图像相同深度,或使用 cv2.CV_16S 等类型以避免溢出。
  • dx: X轴方向的导数阶数,通常为 1
  • dy: Y轴方向的导数阶数,通常为 1
  • ksize: Sobel算子的尺寸,必须是 135 或 7。默认为 3
  • scale: 可选比例因子,默认为 1
  • delta: 可选偏移量,默认为 0
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2
import numpy as np# 加载图像并转换为灰度
img = cv2.imread('image.jpg', 0)# 应用Sobel算子(X轴方向)
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobelx = np.uint8(np.absolute(sobelx))# 应用Sobel算子(Y轴方向)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobely = np.uint8(np.absolute(sobely))# 合并X轴和Y轴方向的梯度
sobel_combined = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)# 显示结果
cv2.imshow('Sobel X', sobelx)
cv2.imshow('Sobel Y', sobely)
cv2.imshow('Sobel Combined', sobel_combined)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Laplacian()

函数名称:
cv2.Laplacian

操作介绍:
拉普拉斯边缘检测是一种基于二阶导数的梯度算子,用于检测图像中的边缘。拉普拉斯算子通过一个3x3的卷积核来计算图像中每个像素点的二阶导数。它对图像中的局部变化非常敏感,可以检测到图像中的细小边缘和细节。然而,拉普拉斯算子对噪声也很敏感,因此在应用之前通常需要进行预平滑处理。

函数参数介绍:

  • src: 输入图像,通常是灰度图像。
  • ddepth: 输出图像的深度,通常为 -1 表示与输入图像相同深度,或使用 cv2.CV_16S 等类型以避免溢出。
  • ksize: 拉普拉斯算子的尺寸,必须是 135 或 7。默认为 1
  • scale: 可选比例因子,默认为 1
  • delta: 可选偏移量,默认为 0
  • borderType: 边界填充方式,如 cv2.BORDER_DEFAULT

代码示例:

import cv2
import numpy as np# 加载图像并转换为灰度
img = cv2.imread('image.jpg', 0)# 应用拉普拉斯算子
laplacian = cv2.Laplacian(img, cv2.CV_64F)
laplacian = np.uint8(np.absolute(laplacian))# 显示结果
cv2.imshow('Laplacian', laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.Canny()

函数名称:
cv2.Canny

操作介绍:
Canny边缘检测是一种多阶段的边缘检测算法,广泛认为是最有效的边缘检测方法之一。Canny算法包括以下几个步骤:

  1. 高斯滤波: 用于减少图像中的噪声。
  2. 计算梯度强度和方向: 使用Sobel算子或其他梯度算子计算图像中每个像素点的梯度强度和方向。
  3. 非极大值抑制: 保留沿边缘方向的最大梯度值,抑制其他非最大值。
  4. 双阈值处理: 使用高低两个阈值来确定哪些边缘像素是强边缘,哪些是弱边缘。
  5. 边缘跟踪: 通过连接强边缘和相邻的弱边缘来形成完整的边缘。

Canny边缘检测能够在保持低错误率的同时检测到真实的边缘,因此在许多计算机视觉任务中非常有用。

函数参数介绍:

  • src: 输入图像,通常是灰度图像。
  • threshold1: 第一个阈值,用于双阈值处理中的低阈值。
  • threshold2: 第二个阈值,用于双阈值处理中的高阈值。
  • apertureSize: Sobel算子的孔径大小,默认为 3
  • L2gradient: 如果为 True,则使用更精确的 L2 范数来计算梯度幅值;如果为 False,则使用更快但稍微不准确的 L1 范数。

代码示例:

import cv2# 加载图像并转换为灰度
img = cv2.imread('image.jpg', 0)# 应用Canny边缘检测
edges = cv2.Canny(img, 100, 200)# 显示结果
cv2.imshow('Canny Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

 14.Opencv的图像特征提取

纹理特征:LBP(局部二值模式)

形状特征:HOG(方向梯度直方图),SIFT(尺度不变特征变换)

相关文章:

我的Opencv

1.安装Opencv pip install opencv-python 2.读取图像 3.写图像 4. 显示图像 5.waitKey() 6.读视频并播放视频 7.写视频 8. 获取摄像头视频 9.色彩转换 # BGR to GRAY imgGRAY cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR to RGB imgRGB cv2.cvtColor(img, cv2.COLOR_…...

Pandas-缺失数据处理

文章目录 一. 简介1. 缺失数据简介2. NaN简介① 查看NaN,NAN,nan② 两个NaN也不相等③ isnull/isna方法④ notnull/notna 二. 加载缺失值1. 来源2. 加载数据,不包含默认缺失值3.加载数据,手动指定缺失值 三.处理缺失值1. 加载数据…...

windows编译llama.cpp GPU版本

Build 指南 https://github.com/ggerganov/llama.cpp/blob/master/docs/build.md 一、Prerequire 具体步骤(以及遇到的坑): 如果你要使用CUDA,请确保已安装。 1.安装 最新的 cmake, git, anaconda, pip 配置pyt…...

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…...

计算机网络500题2024-2025学年度第一学期复习题库(选择、判断、填空)

一、单选题 1、( )是实现两个同种网络互连的设备 A. 网桥 B. 网关 C. 集线器 D. 路由器 2、10M以太网有三种接口标准,其中10BASE-T采用( ) A. 双绞线 B. 粗同轴电缆 C. 细同轴电缆 D. 光纤 3、HDLC是哪…...

python学opencv|读取图像(二十二)使用cv2.polylines()绘制多边形

【1】引言 前序学习进程中,已经掌握了使用pythonopencv绘制线段、矩形和圆形的基本操作,相关链接包括且不限于: python学opencv|读取图像(十八)使用cv2.line创造线段-CSDN博客 python学opencv|读取图像(…...

skywalking配置项indexReplicasNumber不生效问题

indexReplicasNumber: 的配置原来是 indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}, 修改为 indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} 但从es查询索引显示的副本数还是0,删除es中的数据,重启sk…...

2024年终回顾

前言 很久没有更新博客,因为工作内容主要是内场开发,后来有点和互联网脱轨,断断续续上来看一下。这个总结应该也很简单,涉及以下的几个内容进行逐一说明 一、就业问题 这个问题可能很尖锐,从大环境来说,去…...

【深度学习】卷积网络代码实战ResNet

ResNet (Residual Network) 是由微软研究院的何凯明等人在2015年提出的一种深度卷积神经网络结构。ResNet的设计目标是解决深层网络训练中的梯度消失和梯度爆炸问题,进一步提高网络的表现。下面是一个ResNet模型实现,使用PyTorch框架来展示如何实现基本的…...

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 …...

第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

前言 本文介绍了 ES 使用的网络模型,并介绍 transport,http 接收、响应请求的代码入口。 网络 IO 模型 Node 在初始化的时候,会创建网络模块。网络模块会加载 Netty4Plugin plugin。 而后由 Netty4Plugin 创建对应的 transports&#xff0…...

工作流引擎之Flowable

一、概述 Flowable是一个使用Java编写的轻量级业务流程引擎,专为处理复杂业务流程而设计。作为业务流程管理(BPM)领域的重要工具,Flowable不仅支持BPMN 2.0标准的流程定义,还提供了丰富的API接口和可视化工具&#xf…...

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…...

网络编程UDP—socket实现(C++)

网络编程UDP—socket实现 前言UDP客户端和服务端UDP使用场景UDP socket C代码示例服务端接收数据示例(bindrecvfrom 阻塞式接收信息):bind 绑定-监听 函数为什么一般都是监听所有网络接口呢?为什么需要用inet_addr进行转换&#x…...

个人用途虚拟机VM 17安装Ubuntu 16.04.5 图解

1.安装环境软件准备工作 1)下载 免费版VMware Pro 17 https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.6.1/24319023/windows/core/VMware-workstation-17.6.1-24319023.exe.tar 2)Ubuntu 16.04.5 LTS 64位 64-bit PC (AMD64) desktop imag…...

音视频入门基础:MPEG2-TS专题(23)——通过FFprobe显示TS流每个packet的信息

音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...

安卓project级别build.gradle和主module的build.gradle

以穿山甲为例讲解 如下图 gradle和gradle插件对应关系 Android Gradle 插件 8.7 版本说明 | Android Studio | Android Developers gradle对应在项目里的配置为 gradle插件对应的位置为...

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性: 核心方法: 核心信号: 例子: QListWidgetItem QTableWidget 核心方法: 核心信号 QTableWidgetItem 例子: QTreeWidget 核心方法: 核心信号&#xff1a…...

服务器nfs文件共享

1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...

【hackmyvm】soul靶机wp

tags: HMVrbash绕过图片隐写PHP配置解析 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集3. 图片解密3.1. 爆破用户名3.2. 绕过rbash3.3. 提权检测 4. 获取webshell4.1. 修改php配置 5. www-data提权gabriel6. gabriel提取到Peter7. Peter提权root 靶机链接 https://ha…...

安装winserver2008R2虚拟机步骤

一、服务器系统介绍 1.1什么是服务器? 服务器英文名称为“Server”,指的是网络环境下为客户机(Client)提供某种服务的专用计算机,服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务、电子…...

跟着 8.6k Star 的开源数据库,搞 RAG!

过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目。然而,随着项目数量的增加,不少用户反馈:“搜索功能不好用,找不到想要的项目!” 这让我意识到,仅仅收录项目是不够的,还…...

RCE漏洞

一、课程知识点 1、远程代码执行漏洞原理与利用 2、常见的代码执行函数 3、常见的命令执行函数 4、常见的绕过姿势 5、命令执行漏洞防范 二、技术目标 1、掌握命令执行漏洞的原理 2、掌握 PHP 命令执行和代码执行的相关函数 3、掌握常见的绕过姿势 4、掌握代码执行漏洞防御措施…...

数据通信系统的主要性能指标

1.码元速率 n 误码率 2.数据传输速率 n 误比特率 3.时延 n 往返时间 RTT 1. 码元速率 n 码元 ( Code element) n 码元是 数字信号的计量单位 ( Signal element ), 又称为符号( Symbol )。 n 码元 是指在使用时域表示…...

C语言中的贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…...

使用envoyfilter添加请求头

该envoyfilter实现了这样一个功能,如果请求头中含有Sw8,则添加请求头HasSw8: true。 1. 内嵌lua脚本 apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata:name: add-header-filternamespace: demo-bookinfo # 可根据实际情况调整命…...

【机器学习】回归

文章目录 1. 如何训练回归问题2. 泛化能力3. 误差来源4. 正则化5. 交叉验证 1. 如何训练回归问题 第一步:定义模型 线性模型: y ^ b ∑ j w j x j \hat{y} b \sum_{j} w_j x_j y^​b∑j​wj​xj​ 其中,( w ) 是权重,( b )…...

Elasticsearch名词解释

文章目录 1.什么是Elasticsearch?2.什么是elastic stack(ELK)?3.什么是Lucene?4.什么是文档(document)?5.什么是词条(term)?6.什么是正向索引?7.什么是倒排索引?8.ES中的索引(index)9.映射(Mapping)10.DSL11.elastcisearch与my…...

把Huggingface下载的arrow数据集转化为json格式

Arrow2json 使用默认的Huggingface路径 以allenai/tulu-3-sft-mixture数据集为例。 使用load_dataset即可: from datasets import load_dataset# 加载数据集 dataset load_dataset("allenai/tulu-3-sft-mixture")# 指定保存路径 output_dir "~/…...

手机联系人 查询 添加操作

Android——添加联系人_android 添加联系人-CSDN博客 上面连接添加联系人已测试 是可以 Android : 获取、添加、手机联系人-ContentResolver简单应用_contentresolver 添加联系人-CSDN博客...

kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源

目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作&#xff…...

C++ 设计模式:观察者模式(Observer Pattern)

链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 策略模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主…...

Mono 和 IL2Cpp的区别

Mono特征: 标准项目中有Assembly-CSharp.dll , 但在更复杂的项目或特定配置中,可能会有其他.dll或结构变更 在游戏的数据目录下看到一系列的.dll文件,这些文件的语言一般为中间语言 CE附加 , 查看是否有Mono.dll相关模块 目录有MonoBleedingEdge文件夹 IL2Cpp 标准项目应该…...

Windows平台ROBOT安装

Windows环境下ROBOT的安装,按照下文进行部署ROBOT的前提是你的python已安装并且环境变量已设置好. 一、安装setuptools 1、下载后安装 https://pypi.python.org/pypi/setuptools/ 下载你需要的包 setuptools-75.6.0.tar.gz 解压下载的包在命令行中进入该包,敲击如下命令后…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2) 背景 Tips 翻遍国内外的文档,关于 Argo 作为 CI/CD 当前所有开源的文档,博客,argo官方文档。得出的结论是: argo官方给出的例子都相对…...

深入浅出 MyBatis | CRUD 操作、配置解析

3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致! 比如将 UserDao 改名为 UserMapper 运行发现抱错,这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口,接下来一一对…...

Hutool 发送 HTTP 请求的几种常见写法

最简单的 GET 请求: String result HttpUtil.get("https://www.baidu.com");带参数的 GET 请求: // 方法1: 直接拼接URL参数 String result HttpUtil.get("https://www.baidu.com?name张三&age18");// 方法2: 使用 HashMap…...

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...

在Java技术栈中,常用的分布式一致性算法和框架

在Java技术栈中,常用的分布式一致性算法和框架包括: Raft算法: 常用框架: etcd:虽然主要用Go语言编写,但可以通过Java客户端进行访问和操作。Apache Kafka:在其控制器选举中使用类似Raft的机…...

2024.12.29(进程线程实现并发服务器)

作业 多进程多线程并发服务器实现一遍提交。 服务器 #include <myhead.h> #define PORT 12345 #define IP "192.168.124.123"void *fun(void *fd) {int newfd *(int *)fd;char buff[1024];while(1){int res recv(newfd,buff,sizeof(buff),0);if(res 0){p…...

Docker完整技术汇总

Docker 背景引入 在实际开发过程中有三个环境&#xff0c;分别是&#xff1a;开发环境、测试环境以及生产环境&#xff0c;假设开发环境中开发人员用的是jdk8&#xff0c;而在测试环境中测试人员用的时jdk7&#xff0c;这就导致程序员开发完系统后将其打成jar包发给测试人员后…...

区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】

区块链安全常见的攻击分析——不安全调用漏洞 Unsafe Call Vulnerability 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】1.1 漏洞合约1.2 漏洞分析1.3 攻击步骤分析1.4 攻击合约 区块链安全常见的攻击合约和…...

Vue.js 高难度组件开发:从插件化到性能极限优化

Vue.js 高难度组件开发&#xff1a;从插件化到性能极限优化 引言一、插件化组件开发1. 什么是插件化组件2. 案例&#xff1a;构建一个插件化的图表组件 二、动态扩展与自定义组件行为1. 动态添加组件功能 三、复杂交互与细粒度状态管理1. 使用 Vuex 的模块化和动态模块注册 四、…...

一个通用的居于 OAuth2的API集成方案

在现代 web 应用程序中&#xff0c;OAuth 协议是授权和认证的主流选择。为了与多个授权提供商进行无缝对接&#xff0c;我们需要一个易于扩展和维护的 OAuth 解决方案。本文将介绍如何构建一个灵活的、支持多提供商的 OAuth 系统&#xff0c;包括动态 API 调用、路径参数替换、…...

折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务

背景 之前写过&#xff0c;我在家里用了一台旧的工作站笔记本做了服务器&#xff0c;连上一个绿联的5位硬盘盒实现简单的网盘功能&#xff0c;然而&#xff0c;还是觉的不太理想&#xff0c;比如使用filebrowser虽然可以备份文件和图片&#xff0c;当使用手机使用网页&#xf…...

C# dynamic 类型详解

简介 C# 中的 dynamic 是一种特殊类型&#xff0c;它允许在运行时确定对象的类型和成员&#xff0c;而不是在编译时。 dynamic 的定义 dynamic 是一种类型&#xff0c;它告诉编译器对其进行“动态类型解析”。 dynamic 类型的变量会跳过编译时类型检查&#xff0c;所有的操作…...

postgresql ERROR: cannot drop the currently open database

postgresql ERROR: cannot drop the currently open database 解释&#xff1a; 这个错误表明你正在尝试删除或者切换当前正在使用的数据库。在PostgreSQL中&#xff0c;一个数据库对应着一个进程&#xff0c;当一个数据库处于打开状态时&#xff0c;你不能直接删除或者切换它…...

Excel基础知识

一&#xff1a;数组 一行或者一列数据称为一维数组&#xff0c;多行多列称为二维数组&#xff0c;数组支持算术运算&#xff08;如加减乘除等&#xff09;。 行&#xff1a;{1,2,3,4} 数组中的每个值用逗号分隔列&#xff1a;{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…...

【pwnlab_init靶场渗透】

文章目录 一、基础信息 二、信息收集 三、漏洞利用 四、反弹shell 五、提权 一、基础信息 Kali IP &#xff1a;192.168.20.146 靶机IP&#xff1a;192.168.20.157 二、信息收集 nmap -sS -sV -p- -A 192.168.20.157 开放了80、111、3306、50749等端口 访问一下80端口…...

【泰克生物】酶突变文库筛选技术:通过酵母展示实现酶的精准进化

酶工程是生物技术中的一个重要领域&#xff0c;涵盖了酶的改造、优化和应用。通过对酶分子进行定向进化&#xff0c;可以获得具有更高催化效率、更广泛底物特异性或更强稳定性的酶。酶突变文库筛选技术&#xff0c;尤其是酵母展示平台&#xff0c;提供了一种高效且可操作的方法…...