Python-OpenCV中的图像处理-图像直方图

news2024/12/23 19:02:13

Python-OpenCV中的图像处理-图像直方图

  • 图像直方图
    • 统计直方图
    • 绘制直方图
      • Matplotlib绘制灰度直方图
      • Matplotlib绘制RGB直方图
    • 使用掩膜统计直方图
    • 直方图均衡化
      • Numpy图像直方图均衡化
      • OpenCV中的直方图均衡化
      • CLAHE 有限对比适应性直方图均衡化
    • 2D直方图
      • OpenCV中的2D直方图
      • Numpy中2D直方图
    • 直方图反射投影
      • Numpy 中的直方图反射投影算法
      • OpenCV中的直方图反射投影算法

图像直方图

  • 通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。
  • BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需要知道每一个像素值的像素点数目的,而只希望知道两个像素值之间的像素点数目怎么办呢?举例来说,我们想知道像素值在 0 到 15 之间的像素点的数目,接着是 16 到31,…, 240 到 255。我们只需要 16 个值来绘制直方图。
  • DIMS:表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值。所以这里就是 1。
  • RANGE:就是要统计的灰度值范围,一般来说为 [0, 256],也就是说所有的灰度值。

统计直方图

  • cv2.calcHist():OpenCV统计直方图
    cv2:calcHist(images; channels; mask; histSize; ranges[; hist[; accumulate]])
    1. images: 原图像(图像格式为 uint8 或 float32)。当传入函数时应该
      用中括号 [] 括起来,例如: [img]。
    2. channels: 同样需要用中括号括起来,它会告诉函数我们要统计那幅图
      像的直方图。如果输入图像是灰度图,它的值就是 [0];如果是彩色图像
      的话,传入的参数可以是 [0], [1], [2] 它们分别对应着通道 B, G, R。
    3. mask: 掩模图像。要统计整幅图像的直方图就把它设为 None。但是如
      果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并
      使用它。(后边有例子)
    4. histSize:BIN 的数目。也应该用中括号括起来,例如: [256]。
    5. ranges: 像素值范围,通常为 [0, 256]

    img = cv2.imread(‘home.jpg’,0)
    #别忘了中括号 [img],[0],None,[256],[0,256],只有 mask 没有中括号
    hist = cv2.calcHist([img],[0],None,[256],[0,256])
    hist 是一个 256x1 的数组,每一个值代表了与次灰度值对应的像素点数目。

  • np.histogram():Numpy统计直方图
  • np.bincount():Numpy统计直方图(一维直方图,速度快)

#img.ravel() 将图像转成一维数组,这里没有中括号。
hist,bins = np.histogram(img.ravel(),256,[0,256])
Numpy 还 有 一 个 函 数 np.bincount(), 它 的 运 行 速 度 是
np.histgram 的 十 倍。 所 以 对 于 一 维 直 方 图, 我 们 最 好 使 用 这 个函 >数。 使 用 np.bincount 时 别 忘 了 设 置 minlength=256。
hist=np.bincount(img.ravel(), minlength=256)

绘制直方图

Matplotlib绘制灰度直方图

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./resource/opencv/image/leuvenA.jpg', cv2.IMREAD_GRAYSCALE)
plt.hist(img.ravel(), 256, [0, 256])
plt.show()

在这里插入图片描述
在这里插入图片描述

Matplotlib绘制RGB直方图

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./resource/opencv/image/leuvenA.jpg', cv2.IMREAD_COLOR)

color = ('b', 'g', 'r')

for i, col in enumerate(color):
    histr = cv2.calcHist([img], [i], None, [256], [0, 256])
    plt.plot(histr, color = col)
    plt.xlim([0, 256])
plt.show()

在这里插入图片描述

使用掩膜统计直方图

要统计图像某个局部区域的直方图只需要构建一副掩模图像。将要统计的部分设置成白色,其余部分为黑色,就构成了一副掩模图像。然后把这个掩模图像传给函数就可以了。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./resource/opencv/image/leuvenA.jpg', cv2.IMREAD_GRAYSCALE)
h,w = img.shape
print(h,w)

# create mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:400, 100:500] = 255
masked_img = cv2.bitwise_and(img, img, mask = mask)

hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])

plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full, 'r'), plt.plot(hist_mask, 'b')
plt.xlim([0, 256])
plt.show()

红色线是整幅图的直方图,蓝色线是掩膜之后的直方图:
在这里插入图片描述

直方图均衡化

  • 如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛。所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况下这种操作会改善图像的对比度。在这里插入图片描述

  • 直方图均衡化处理可以提高图像的清晰度

Numpy图像直方图均衡化

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./resource/opencv/image/leuvenA.jpg', cv2.IMREAD_GRAYSCALE)

# 1.使用Numpy统计原图直方图
# flatten() 将数组变成一维
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 计算累积分布图
cdf = hist.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()


# 2.使用Numpy直方图均衡化处理
# 构建 Numpy 掩模数组, cdf 为原数组,当数组元素为 0 时,掩盖(计算时被忽略)。
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min()) *255/(cdf_m.max() - cdf_m.min())
# 对被掩盖的元素赋值,这里赋值为 0
cdf = np.ma.filled(cdf_m, 0).astype('uint8')
# 现在就获得了一个表,我们可以通过查表得知与输入像素对应的输出像素的值。我们只需要把这种变换应用到图像上就可以了
img2 = cdf[img]

# 3. 绘制原图直方图
plt.subplot(221), plt.imshow(cv2.cvtColor(img, cv2.COLOR_GRAY2RGB))
plt.subplot(222)
plt.plot(cdf_normalized, color='b')
plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.legend(('cdf', 'histogram'), loc='upper left')

# 4.绘制均衡化直方图
plt.subplot(223), plt.imshow(cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB))
plt.subplot(224)
plt.plot(cdf_m, color='g')
plt.hist(img2.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.legend(('cdf', 'histogram'), loc='upper left')

plt.show()

在这里插入图片描述

OpenCV中的直方图均衡化

OpenCV 中的直方图均衡化函数为 cv2.equalizeHist()。这个函数的输入图片仅仅是一副灰度图像,输出结果是直方图均衡化之后的图像。

import numpy as np
import cv2

img = cv2.imread('./resource/opencv/image/leuvenA.jpg', cv2.IMREAD_GRAYSCALE)
# 直方图均衡化
equ = cv2.equalizeHist(img)
# 图像拼接,左边原图,右边直方图均衡化之后的图像
res = np.hstack((img, equ))

cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

左边原图,右边直方图均衡化之后的图像
在这里插入图片描述

CLAHE 有限对比适应性直方图均衡化

文章上边做的直方图均衡化会改变整个图像的对比度,但是在很多情况下,这样做的效果并不好。例如,下图分别是输入图像和进行直方图均衡化之后的输出图像。的确在进行完直方图均衡化之后,图片背景的对比度被改变了。但是你再
对比一下两幅图像中雕像的面图,由于太亮我们丢失了很多信息。
在这里插入图片描述
为了解决这个问题,我们需要使用自适应的直方图均衡化。这种情况下,整幅图像会被分成很多小块,这些小块被称为“tiles”(在 OpenCV 中 tiles 的大小默认是 8x8),然后再对每一个小块分别进行直方图均衡化(跟前面类似)。所以在每一个的区域中,直方图会集中在某一个小的区域中(除非有噪声干扰)。如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度限制。对于每个小块来说,如果直方图中的 bin 超过对比度的上限的话,就把其中的像素点均匀分散到其他 bins 中,然后在进行直方图均衡化。最后,为了去除每一个小块之间“人造的”(由于算法造成)边界,再使用双线性差值,对小块进行缝合。

import numpy as np
import cv2
from matplotlib import pyplot as plt


img = cv2.imread('./resource/opencv/image/clahe_2.jpg', cv2.IMREAD_GRAYSCALE)

# 均衡化处理
equ = cv2.equalizeHist(img)

# 自适应均衡化处理
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)

# 绘制图像
plt.subplot(131), plt.imshow(cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)), plt.title('img')
plt.subplot(132), plt.imshow(cv2.cvtColor(equ, cv2.COLOR_GRAY2RGB)), plt.title('equ')
plt.subplot(133), plt.imshow(cv2.cvtColor(cl1, cv2.COLOR_GRAY2RGB)), plt.title('cl1')
plt.show()

在这里插入图片描述

2D直方图

在前面的文章介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在 2D 直方图中我们就要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色( Hue)和饱和度( Saturation)。根据这两个特征绘制 2D 直方图。

OpenCV中的2D直方图

使用函数 cv2.calcHist() 来计算直方图既简单又方便。如果要绘制颜色直方图的话,我们首先需要将图像的颜色空间从 BGR 转换到 HSV。(记住,计算一维直方图,要从 BGR 转换到 HSV)。计算 2D 直方图,函数的参数要做如下修改:

  • channels=[0, 1] 因为我们需要同时处理 H 和 S 两个通道。
  • bins=[180, 256]H 通道为 180, S 通道为 256。
  • range=[0, 180, 0, 256]H 的取值范围在 0 到 180, S 的取值范围在 0 到 256。
import numpy as np
import cv2
from matplotlib import pyplot as plt


img = cv2.imread('./resource/opencv/image/home.jpg', cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB), 'gray')
plt.subplot(122), plt.imshow(hist, interpolation = 'nearest')
plt.show()


在这里插入图片描述

Numpy中2D直方图

Numpy 同样提供了绘制 2D 直方图的函数:

  • np.histogram():一维直方图
  • np.histogram2d():二纬直方图
import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('./resource/opencv/image/home.jpg', cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)#分离通道
hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

plt.subplot(131), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.subplot(132), plt.imshow(hist)
plt.show()

在这里插入图片描述

直方图反射投影

  • 直方图反向投影是由 Michael J. Swain 和 Dana H. Ballard 在他们的文章“Indexing via color histograms”中提出。
  • 它可以用来做图像分割,或者在图像中找寻我们感兴趣的部分。简单来说,它会输出与输入图像(待搜索)同样大小的图像,其中的每一个像素值代表了输入图像上对应点属于目标对象的概率。用更简单的话来解释,输出图像中像素值越高(越白)的点就越可能代表我们要搜索的目标(在输入图像所在的位置)。这是一个直观的解释。直方图投影经常与 camshift算法等一起使用。
  • 我们应该怎样来实现这个算法呢?首先我们要为一张包含我们要查找目标的图像创建直方图(在我们的示例中,我们要查找的是草地,其他的都不要)。我们要查找的对象要尽量占满这张图像(换句话说,这张图像上最好是有且仅有我们要查找的对象)。最好使用颜色直方图,因为一个物体的颜色要比它的灰度能更好的被用来进行图像分割与对象识别。接着我们再把这个颜色直方图投影到输入图像中寻找我们的目标,也就是找到输入图像中的每一个像素点的像素值在直方图中对应的概率,这样我们就得到一个概率图像,最后设置适当的阈值对概率图像进行二值化,就这么简单。

Numpy 中的直方图反射投影算法

首先,我们要创建两幅颜色直方图,目标图像的直方图( ‘M’),(待搜索)输入图像的直方图( ‘I’)。

import numpy as np
import cv2
from matplotlib import pyplot as plt

roi = cv2.imread('./resource/opencv/image/target.jpg', cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

target = cv2.imread('./resource/opencv/image/messi5.jpg', cv2.IMREAD_COLOR)
hsvt = cv2.cvtColor(target, cv2.COLOR_BGR2HSV)

M = cv2.calcHist([hsv],  [0, 1], None, [180, 256], [0, 180, 0, 256])
I = cv2.calcHist([hsvt], [0, 1], None, [180, 256], [0, 180, 0, 256])

# 计算比值: R = M/I 。反向投影 R,也就是根据 R 这个”调色板“创建一
# 副新的图像,其中的每一个像素代表这个点就是目标的概率。
# 例如 B (x; y) = R [h (x; y) ; s (x; y)],
# 其中 h 为点( x, y)处的 hue 值, s 为点( x, y)处的
# saturation 值。最后加入再一个条件 B (x; y) = min [B (x; y) ; 1]
R = M/I

h, s, v = cv2.split(hsvt)
B = R[h.ravel(), s.ravel()]
B = np.minimum(B, 1)
B = B.reshape(hsvt.shape[:2])

# 现在使用一个圆盘算子做卷积, B = D × B,其中 D 为卷积核
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
B = cv2.filter2D(B, -1, disc)
B = np.uint8(B)

# 归一化处理
cv2.normalize(B,B,0,255,cv2.NORM_MINMAX)
ret, thresh = cv2.threshold(B, 50, 255, 0)
# 别忘了是三通道图像,因此这里使用 merge 变成 3 通道
thresh = cv2.merge((thresh,thresh,thresh))
res = cv2.bitwise_and(target, thresh)

res = np.hstack((target, thresh, res))
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

程序运行结果:
在这里插入图片描述
target.jpg:是另外一副图草地区域的一块截图
在这里插入图片描述
messi5.jpg:
在这里插入图片描述

OpenCV中的直方图反射投影算法

OpenCV 提供的函数 cv2.calcBackProject() 可以用来做直方图反向投影。它的参数与函数 cv2.calcHist 的参数基本相同。其中的一个参数是我们要查找目标的直方图。同样再使用目标的直方图做反向投影之前我们应该先对其做归一化处理。返回的结果是一个概率图像,我们再使用一个圆盘形卷积核对其做卷操作,最后使用阈值进行二值化。

import cv2
import numpy as np

roi = cv2.imread('./resource/opencv/image/target.jpg', cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)

target = cv2.imread('./resource/opencv/image/messi5.jpg', cv2.IMREAD_COLOR)
hsvt = cv2.cvtColor(target, cv2.COLOR_BGR2HSV)

# calculating object histogram
roihist = cv2.calcHist([hsv], [0,1], None, [180, 256], [0, 180, 0, 256])

# normalize histogram and apply backprojection
# 归一化:原始图像,结果图像,映射到结果图像中的最小值,最大值,归一化类型
#cv2.NORM_MINMAX 对数组的所有值进行转化,使它们线性映射到最小值和最大值之间
# 归一化之后的直方图便于显示,归一化之后就成了 0 到 255 之间的数了
cv2.normalize(roihist, roihist, 0, 255, cv2.NORM_MINMAX)
dst = cv2.calcBackProject([hsvt], [0, 1], roihist, [0, 180, 0, 256], 1)

# Now convolute with circular disc
# 此处卷积可以把分散的点连在一起
disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
dst = cv2.filter2D(dst, -1, disc)

# threshold and binary AND
ret, thresh = cv2.threshold(dst, 50, 255, 0)
# 别忘了是三通道图像,因此这里使用 merge 变成 3 通道
thresh = cv2.merge((thresh,thresh,thresh))
res = cv2.bitwise_and(target, thresh)

res = np.hstack((target, thresh, res))
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

程序运行结果:
在这里插入图片描述
target.jpg:是另外一副图草地区域的一块截图
在这里插入图片描述
messi5.jpg:
在这里插入图片描述

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

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

相关文章

计算机组成原理之地址映射

例1:某计算机主存容量256MB,按字编址,字长1B,块大小32B,Cache容量512KB。对如下的直接映射方式、4-路组相联映射方式、全相联映射方式的内存地址格式,求: (1)计算A、B、C…

什么是层叠上下文(stacking context)?它是如何形成的?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 层叠上下文(Stacking Context)是什么?⭐ 层叠上下文的形成⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎…

DNS主域名服务器搭建之深入了解

一些DNS的配置文件以及重要信息: 主配置文件:/etc/named.conf 次要配置文件: /etc/named.rfc1912.zones 主进程名字:named named.ca 记录13台根域名服务器地址的文件 监听的端口:53 tcp/udp 1、修改次要配置文件…

【HarmonyOS】API9沉浸式状态栏

对于沉浸式状态栏,在之前API8 FA模型开发中可以通过在config.json配置主题的方式实现应用的沉浸式体验,在最新的API9 Stage模型中系统提供了沉浸式窗口的示例(管理应用窗口(Stage模型)-窗口管理-开发-HarmonyOS应用开发…

【Spring Cloud Alibaba】RocketMQ的基础使用,如何发送消息和消费消息

在现代分布式架构的开发中,消息队列扮演着至关重要的角色,用于解耦系统组件、保障可靠性以及实现异步通信。RocketMQ作为一款开源的分布式消息中间件,凭借其高性能、高可用性和良好的扩展性,成为了众多企业在构建高可靠性、高吞吐…

关于统一事件管理,一定有你想知道的(一)

本文部分内容来源于布博士----擎创科技资深产品专家 IT技术已经无处不在,各行各业都离不开它。无论是银行、券商、家庭、学校还是个人,都离不开IT技术。例如: 我们⼈与⼈之间社交的软件,如微信、QQ、陌陌、Facebook等。 银⾏通过…

火山引擎DataLeap的Data Catalog系统公有云实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 Data Catalog是一种元数据管理的服务,会收集技术元数据,并在其基础上提供更丰富的业务上下文与语义,通常支持元数据编目、查找、…

常见分辨率时序信息

分辨率列表 分辨率一:640x480(逐行) 分辨率二:800x600(逐行) 分辨率三:1024x768(逐行) 分辨率四:大名鼎鼎720P(逐行) 注:选择720P@30帧的,需拉长HOR TOTAL TIME 分辨率五:1280x800(逐行) 分辨率六:1280x960(逐行

MySQL和Redis如何保证数据一致性

MySQL与Redis都是常用的数据存储和缓存系统。为了提高应用程序的性能和可伸缩性,很多应用程序将MySQL和Redis一起使用,其中MySQL作为主要的持久存储,而Redis作为主要的缓存。在这种情况下,应用程序需要确保MySQL和Redis中的数据是…

Bootstrap-fileinput 插件的使用

1.bootstrap-fileinput 下载地址 https://github.com/kartik-v/bootstrap-fileinput.git 2.bootstrap-fileinput 使用 input 标签 multiple"multiple" 表示可以多选文件 <div class"container-fluid"><div class"card border-0 shadow-sm…

深度学习在MRI运动校正中的应用综述

运动是MRI中的主要挑战之一。由于MR信号是在频率空间中获取的&#xff0c;因此除了其他MR成像伪影之外&#xff0c;成像对象的任何运动都会导致重建图像中产生伪影。深度学习被提出用于重建过程的几个阶段的运动校正。广泛的MR采集序列、感兴趣的解剖结构和病理学以及运动模式&…

这四种订货系统不能选(四):不能源码交付

订货系统在现代企业管理中具备着重要的地位和作用。通过订货系统&#xff0c;企业能够更好地掌握市场需求&#xff0c;提高订单的准确性和及时性&#xff0c;优化企业的供应链管理&#xff0c;并加强与供应商之间的合作与沟通。今天我们分享最后一个不能选的、也是最重要的一点…

ArcGIS Pro发布地图服务(影像、矢量)

本文示例使用&#xff08;因为portal的授权的版本只有10.5的&#xff0c;故使用10.5进行示例&#xff09;&#xff1a; 软件:ArcGIS Pro3.0.1&#xff08;破解版&#xff09;&#xff0c; ArcGIS Portal10.5 当ArcGIS Pro和Portal不在一个机器或者版本不一样的时候&#xff0…

日常问题——git推送代码被拒绝

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 Push to origin/master was rejected 提交代码时提示&#xff0c;被拒绝。 二、问题原因 …

(七)Unity VR项目升级至Vision Pro需要做的工作

Vision Pro 概述 定位为混合现实眼镜&#xff0c;对AR支持更友好 无手柄&#xff0c;支持手&#xff08;手势&#xff09;、眼&#xff08;注视&#xff09;、语音交互 支持空间音频&#xff0c;相比立体声、环绕声更有沉浸感和空间感 支持VR/AR应用&#xff0c;支持多种应用模…

零基础官网下载jdk

Oracle 官网总是隔一段时间一改版&#xff0c;时间长了博客可能不适用&#xff0c;望注意&#xff0c;但是精髓不变。 Oracle官网 官网地址百度搜索&#xff0c;其他任何官网都一个套路&#xff0c;但要识别下一些广告网站会模仿官方网站。 官网地址&#xff1a;https://www.…

k8s服务注册发现

Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。 定义service前端为service名称、ip、端口等不变的部分&#xff0c;后端为符合标签选择的pod集合 注册 通过api server提交注册service请求到DNSservice随后得到clusterIP&#xff08;虚拟ip地址&am…

UHPC的疲劳计算——兼论ModelCode2010的适用性

文章目录 0. 背景1、结论及概述2、MC10对于SN曲线的调整&#xff08;囊括NC、HPC、UHPC&#xff09;2.1 疲劳失效曲面的构建2.2 新模型的验证 3、MC10对于疲劳设计强度的调整及其背后的原因4. 结语 0. 背景 今年年初&#xff0c;有一位用UHPC做混凝土塔筒的同行告诉我&#xf…

多平台1688、淘宝、京东搜索商品聚合接口,示例返回值说明

多平台根据关键词取商品列表 API 返回值说明 item_search-根据关键词取商品列表 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;Taobao。拼多多。京东&#xff0c;1688API 接口测试secretString是调用密钥api_nameString是A…

Deep Learning With Pytorch - 最基本的感知机、贯序模型/分类、拟合

文章目录 如何利用pytorch创建一个简单的网络模型&#xff1f;Step1. 感知机&#xff0c;多层感知机&#xff08;MLP&#xff09;的基本结构Step2. 超平面 ω T ⋅ x b 0 \omega^{T}xb0 ωT⋅xb0 or ω T ⋅ x b \omega^{T}xb ωT⋅xb感知机函数 Step3. 利用感知机进行决策…