【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】

文章目录

    • 概要
    • 前置条件
    • 统计数据分析
    • 直方图均衡化原理
    • 小结

概要

图像处理是计算机视觉领域中的重要组成部分,而直方图在图像处理中扮演着关键的角色。如何巧妙地运用OpenCV库中的图像处理技巧,特别是直方图相关的方法,来提高图像质量、改善细节以及调整曝光。
通过对图像的直方图进行分析和调整,能够优化图像的对比度、亮度和色彩平衡,从而使图像更具可视化效果。

直方图是一种统计图,用于表示图像中像素灰度级别的分布情况。在OpenCV中,可以使用直方图来了解图像的整体亮度分布,从而为后续处理提供基础。

OpenCV库中的函数,如cv2.calcHist和cv2.equalizeHist等,对图像的直方图进行均衡化。直方图均衡化是一种有效的方法,通过重新分配像素的强度值,使图像的亮度分布更均匀,提高图像的对比度和细节。

直方图匹配的应用,通过将目标图像的直方图调整到参考图像的直方图,实现两者之间的色彩一致性。这在图像配准和合成中有广泛的应用,提高了图像处理的精度和效果。

在低光照条件下拍摄图像的处理技巧。通过分析图像的直方图,可以采取针对性的方法,提高低光照图像中物体的可见性,改善图像的细节,并校正曝光过度或曝光不足的问题。

前置条件

一般来说,通过合理利用一些直方图的技巧,可以用于提高低光照拍摄图像中物体的可见性,改善图像的细节,以及校正曝光过度或曝光不足的图像。

import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2gray
from skimage.exposure import histogram, cumulative_distribution
from skimage import filters
from skimage.color import rgb2hsv, rgb2gray, rgb2yuv
from skimage import color, exposure, transform
from skimage.exposure import histogram, cumulative_distributionfrom skimage.io import imread# Load the image & remove the alpha or opacity channel (transparency)
dark_image = imread('img.png')[:,:,:3]# Visualize the image
plt.figure(figsize=(10, 10))
plt.title('Original Image: Plasma Ball')
plt.imshow(dark_image)
plt.show()

在这里插入图片描述
上述图像是在光照不足下进行拍摄的,接着我们就来通过控制直方图,来改善我们的视觉效果。

统计数据分析

使用以下代码:


def calc_color_overcast(image):# Calculate color overcast for each channelred_channel = image[:, :, 0]green_channel = image[:, :, 1]blue_channel = image[:, :, 2]# Create a dataframe to store the resultschannel_stats = pd.DataFrame(columns=['Mean', 'Std', 'Min', 'Median', 'P_80', 'P_90', 'P_99', 'Max'])# Compute and store the statistics for each color channelfor channel, name in zip([red_channel, green_channel, blue_channel], ['Red', 'Green', 'Blue']):mean = np.mean(channel)std = np.std(channel)minimum = np.min(channel)median = np.median(channel)p_80 = np.percentile(channel, 80)p_90 = np.percentile(channel, 90)p_99 = np.percentile(channel, 99)maximum = np.max(channel)channel_stats.loc[name] = [mean, std, minimum, median, p_80, p_90, p_99, maximum]return channel_stats

完整代码:

import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2gray
from skimage.exposure import histogram, cumulative_distribution
from skimage import filters
from skimage.color import rgb2hsv, rgb2gray, rgb2yuv
from skimage import color, exposure, transform
from skimage.exposure import histogram, cumulative_distribution
import pandas as pdfrom skimage.io import imread# Load the image & remove the alpha or opacity channel (transparency)
dark_image = imread('img.png')[:,:,:3]# Visualize the image
plt.figure(figsize=(10, 10))
plt.title('Original Image: Plasma Ball')
plt.imshow(dark_image)
plt.show()def calc_color_overcast(image):# Calculate color overcast for each channelred_channel = image[:, :, 0]green_channel = image[:, :, 1]blue_channel = image[:, :, 2]# Create a dataframe to store the resultschannel_stats = pd.DataFrame(columns=['Mean', 'Std', 'Min', 'Median','P_80', 'P_90', 'P_99', 'Max'])# Compute and store the statistics for each color channelfor channel, name in zip([red_channel, green_channel, blue_channel],['Red', 'Green', 'Blue']):mean = np.mean(channel)std = np.std(channel)minimum = np.min(channel)median = np.median(channel)p_80 = np.percentile(channel, 80)p_90 = np.percentile(channel, 90)p_99 = np.percentile(channel, 99)maximum = np.max(channel)channel_stats.loc[name] = [mean, std, minimum, median, p_80, p_90, p_99, maximum]return channel_stats
# 调用函数并传入图像
result_stats = calc_color_overcast(dark_image)# 打印结果
print(result_stats)

在这里插入图片描述
进而我们可以使用以下代码,来生成上述图像的直方图分布:

# Histogram plot
dark_image_intensity = img_as_ubyte(rgb2gray(dark_image))
freq, bins = histogram(dark_image_intensity)
plt.step(bins, freq*1.0/freq.sum())
plt.xlabel('intensity value')
plt.ylabel('fraction of pixels');
plt.show()  # 添加这一行以显示直方图

得到直方图可视化效果如下:
在这里插入图片描述
通过直方图的观察,可以注意到图像的像素平均强度似乎非常低,这进一步证实了图像的整体暗淡和曝光不足的情况。直方图展示了图像中像素强度值的分布情况,而大多数像素具有较低的强度值。这是有道理的,因为低像素强度值意味着图像中的大多数像素非常暗或呈现黑色。这样的观察有助于定量了解图像的亮度分布,为进一步的图像增强和调整提供了重要的线索。

直方图均衡化原理

直方图均衡化的基本原理是通过线性化图像的累积分布函数(CDF)来提高图像的对比度。实现这一目标的方法是将图像中每个像素的强度值映射到一个新的值,使得新的强度分布更加均匀。

可以通过以下几个步骤实现CDF的线性化:

将图像转换为灰度图:
如果图像不是灰度图,代码会将其转换为灰度图。这是因为直方图均衡化主要应用于灰度图。

计算累积分布函数(CDF):
通过计算图像像素的强度值的累积分布函数,可以了解每个强度值在图像中出现的累积频率。

绘制实际和目标CDF:
使用蓝色实线表示实际的CDF,使用红色实线表示目标CDF。目标CDF是一个线性分布,通过均匀分布来提高对比度。

绘制示例查找表:
绘制一个示例查找表,展示了像素强度值从原始值映射到目标值的过程。

自定义绘图:
对绘图进行自定义,包括设置坐标轴范围、标签和标题等。

import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2hsv, rgb2gray, rgb2yuv
from skimage.exposure import histogram, cumulative_distribution
import pandas as pd
from skimage import img_as_ubyte
from skimage.io import imread# Load the image & remove the alpha or opacity channel (transparency)
dark_image = imread('img.png')[:,:,:3]# Visualize the image
plt.figure(figsize=(10, 10))
plt.title('Original Image: Plasma Ball')
plt.imshow(dark_image)
plt.show()def calc_color_overcast(image):# Calculate color overcast for each channelred_channel = image[:, :, 0]green_channel = image[:, :, 1]blue_channel = image[:, :, 2]# Create a dataframe to store the resultschannel_stats = pd.DataFrame(columns=['Mean', 'Std', 'Min', 'Median','P_80', 'P_90', 'P_99', 'Max'])# Compute and store the statistics for each color channelfor channel, name in zip([red_channel, green_channel, blue_channel],['Red', 'Green', 'Blue']):mean = np.mean(channel)std = np.std(channel)minimum = np.min(channel)median = np.median(channel)p_80 = np.percentile(channel, 80)p_90 = np.percentile(channel, 90)p_99 = np.percentile(channel, 99)maximum = np.max(channel)channel_stats.loc[name] = [mean, std, minimum, median, p_80, p_90, p_99, maximum]return channel_statsdef plot_cdf(image):# Convert the image to grayscale if neededif len(image.shape) == 3:image = rgb2gray(image[:, :, :3])# Compute the cumulative distribution functionintensity = np.round(image * 255).astype(np.uint8)freq, bins = cumulative_distribution(intensity)# Plot the actual and target CDFstarget_bins = np.arange(256)target_freq = np.linspace(0, 1, len(target_bins))plt.step(bins, freq, c='b', label='Actual CDF')plt.plot(target_bins, target_freq, c='r', label='Target CDF')# Plot an example lookupexample_intensity = 50example_target = np.interp(freq[example_intensity], target_freq, target_bins)plt.plot([example_intensity, example_intensity, target_bins[-11], target_bins[-11]],[0, freq[example_intensity], freq[example_intensity], 0],'k--',label=f'Example lookup ({example_intensity} -> {example_target:.0f})')# Customize the plotplt.legend()plt.xlim(0, 255)plt.ylim(0, 1)plt.xlabel('Intensity Values')plt.ylabel('Cumulative Fraction of Pixels')plt.title('Cumulative Distribution Function')return freq, bins, target_freq, target_bins
# 调用函数并传入图像
result_stats = calc_color_overcast(dark_image)# 打印结果
print(result_stats)
# Histogram plot
# Histogram plot
dark_image_intensity = img_as_ubyte(rgb2gray(dark_image))
freq, bins = histogram(dark_image_intensity)
plt.step(bins, freq*1.0/freq.sum())
plt.xlabel('intensity value')
plt.ylabel('fraction of pixels')
plt.show()  # 添加这一行以显示直方图# 调用 plot_cdf 函数并传入图像
plot_cdf(dark_image)
plt.show()  # 添加这一行以显示CDF图形

在这里插入图片描述

直方图均衡化实现结果:

import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2gray
from skimage.exposure import histogram, cumulative_distribution, equalize_hist
from skimage import img_as_ubyte
from skimage.io import imread# Load the image & remove the alpha or opacity channel (transparency)
dark_image = imread('img.png')[:,:,:3]# Visualize the original image
plt.figure(figsize=(10, 10))
plt.title('Original Image: Plasma Ball')
plt.imshow(dark_image)
plt.show()# Convert the image to grayscale
gray_image = rgb2gray(dark_image)# Apply histogram equalization
equalized_image = equalize_hist(gray_image)# Display the original and equalized images
plt.figure(figsize=(15, 7))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(gray_image, cmap='gray')plt.subplot(1, 2, 2)
plt.title('Equalized Image')
plt.imshow(equalized_image, cmap='gray')plt.show()

在这里插入图片描述

扩展:
上面展示了最基本的直方图操作类型,接着让我们尝试不同类型的CDF技术,看看哪种技术适合给定的图像


# Linear
target_bins = np.arange(256)
# Sigmoid
def sigmoid_cdf(x, a=1):return (1 + np.tanh(a * x)) / 2
# Exponential
def exponential_cdf(x, alpha=1):return 1 - np.exp(-alpha * x)# Power
def power_law_cdf(x, alpha=1):return x ** alpha
# Other techniques:
def adaptive_histogram_equalization(image, clip_limit=0.03, tile_size=(8, 8)):clahe = exposure.equalize_adapthist(image, clip_limit=clip_limit, nbins=256, kernel_size=(tile_size[0], tile_size[1]))return clahe
def gamma_correction(image, gamma=1.0):corrected_image = exposure.adjust_gamma(image, gamma)return corrected_image
def contrast_stretching_percentile(image, lower_percentile=5, upper_percentile=95):in_range = tuple(np.percentile(image, (lower_percentile, upper_percentile)))stretched_image = exposure.rescale_intensity(image, in_range)return stretched_imagedef unsharp_masking(image, radius=5, amount=1.0):blurred_image = filters.gaussian(image, sigma=radius, multichannel=True)sharpened_image = (image + (image - blurred_image) * amount).clip(0, 1)return sharpened_imagedef equalize_hist_rgb(image):equalized_image = exposure.equalize_hist(image)return equalized_imagedef equalize_hist_hsv(image):hsv_image = color.rgb2hsv(image[:,:,:3])hsv_image[:, :, 2] = exposure.equalize_hist(hsv_image[:, :, 2])hsv_adjusted = color.hsv2rgb(hsv_image)return hsv_adjusteddef equalize_hist_yuv(image):yuv_image = color.rgb2yuv(image[:,:,:3])yuv_image[:, :, 0] = exposure.equalize_hist(yuv_image[:, :, 0])yuv_adjusted = color.yuv2rgb(yuv_image)return yuv_adjusted

使用代码:

import numpy as np
import matplotlib.pyplot as plt
from skimage.io import imread
from skimage.color import rgb2gray
from skimage.exposure import histogram, cumulative_distribution
from skimage import exposure, color, filters# Load the image & remove the alpha or opacity channel (transparency)
dark_image = imread('img.png')[:, :, :3]# Visualize the original image
plt.figure(figsize=(10, 10))
plt.title('Original Image: Plasma Ball')
plt.imshow(dark_image)
plt.show()# Linear
target_bins = np.arange(256)
# Sigmoid
def sigmoid_cdf(x, a=1):return (1 + np.tanh(a * x)) / 2
# Exponential
def exponential_cdf(x, alpha=1):return 1 - np.exp(-alpha * x)# Power
def power_law_cdf(x, alpha=1):return x ** alpha
# Other techniques:
def adaptive_histogram_equalization(image, clip_limit=0.03, tile_size=(8, 8)):clahe = exposure.equalize_adapthist(image, clip_limit=clip_limit, nbins=256, kernel_size=(tile_size[0], tile_size[1]))return clahe
def gamma_correction(image, gamma=1.0):corrected_image = exposure.adjust_gamma(image, gamma)return corrected_image
def contrast_stretching_percentile(image, lower_percentile=5, upper_percentile=95):in_range = tuple(np.percentile(image, (lower_percentile, upper_percentile)))stretched_image = exposure.rescale_intensity(image, in_range)return stretched_imagedef unsharp_masking(image, radius=5, amount=1.0):blurred_image = filters.gaussian(image, sigma=radius, multichannel=True)sharpened_image = (image + (image - blurred_image) * amount).clip(0, 1)return sharpened_imagedef equalize_hist_rgb(image):equalized_image = exposure.equalize_hist(image)return equalized_imagedef equalize_hist_hsv(image):hsv_image = color.rgb2hsv(image[:,:,:3])hsv_image[:, :, 2] = exposure.equalize_hist(hsv_image[:, :, 2])hsv_adjusted = color.hsv2rgb(hsv_image)return hsv_adjusteddef equalize_hist_yuv(image):yuv_image = color.rgb2yuv(image[:,:,:3])yuv_image[:, :, 0] = exposure.equalize_hist(yuv_image[:, :, 0])yuv_adjusted = color.yuv2rgb(yuv_image)return yuv_adjusted
def apply_cdf(image, cdf_function, *args, **kwargs):# Convert the image to grayscalegray_image = rgb2gray(image)# Calculate the cumulative distribution function (CDF)intensity = np.round(gray_image * 255).astype(np.uint8)cdf_values, bins = cumulative_distribution(intensity)# Apply the specified CDF functiontransformed_cdf = cdf_function(cdf_values, *args, **kwargs)# Map the CDF values back to intensity valuestransformed_intensity = np.interp(intensity, cdf_values, transformed_cdf)# Rescale the intensity values to [0, 1]transformed_intensity = transformed_intensity / 255.0# Apply the transformation to the original imagetransformed_image = image.copy()for i in range(3):transformed_image[:, :, i] = transformed_intensityreturn transformed_image# Apply and visualize different CDF techniques
linear_image = apply_cdf(dark_image, lambda x: x)
sigmoid_image = apply_cdf(dark_image, sigmoid_cdf, a=1)
exponential_image = apply_cdf(dark_image, exponential_cdf, alpha=1)
power_law_image = apply_cdf(dark_image, power_law_cdf, alpha=1)
adaptive_hist_eq_image = adaptive_histogram_equalization(dark_image)
gamma_correction_image = gamma_correction(dark_image, gamma=1.5)
contrast_stretch_image = contrast_stretching_percentile(dark_image)
unsharp_mask_image = unsharp_masking(dark_image)
equalized_hist_rgb_image = equalize_hist_rgb(dark_image)
equalized_hist_hsv_image = equalize_hist_hsv(dark_image)
equalized_hist_yuv_image = equalize_hist_yuv(dark_image)# Visualize the results
plt.figure(figsize=(15, 15))
plt.subplot(4, 4, 1), plt.imshow(linear_image), plt.title('Linear CDF')
plt.subplot(4, 4, 2), plt.imshow(sigmoid_image), plt.title('Sigmoid CDF')
plt.subplot(4, 4, 3), plt.imshow(exponential_image), plt.title('Exponential CDF')
plt.subplot(4, 4, 4), plt.imshow(power_law_image), plt.title('Power Law CDF')
plt.subplot(4, 4, 5), plt.imshow(adaptive_hist_eq_image), plt.title('Adaptive Histogram Equalization')
plt.subplot(4, 4, 6), plt.imshow(gamma_correction_image), plt.title('Gamma Correction')
plt.subplot(4, 4, 7), plt.imshow(contrast_stretch_image), plt.title('Contrast Stretching')
plt.subplot(4, 4, 8), plt.imshow(unsharp_mask_image), plt.title('Unsharp Masking')
plt.subplot(4, 4, 9), plt.imshow(equalized_hist_rgb_image), plt.title('Equalized Histogram (RGB)')
plt.subplot(4, 4, 10), plt.imshow(equalized_hist_hsv_image), plt.title('Equalized Histogram (HSV)')
plt.subplot(4, 4, 11), plt.imshow(equalized_hist_yuv_image), plt.title('Equalized Histogram (YUV)')plt.tight_layout()
plt.show()

输出结果:
在这里插入图片描述

小结

有多种方法和技术可用于改善RGB图像的可视效果,但其中许多方法都需要手动调整参数。上述输出展示了使用不同直方图操作生成的亮度校正效果。通过观察,发现HSV调整、指数变换、对比度拉伸和unsharp masking的效果都是令人满意的。

HSV调整:
HSV调整涉及将RGB图像转换为HSV颜色空间并修改强度分量。这种技术似乎在提高图像可视化效果方面取得了令人满意的结果。

指数变换:
指数变换用于根据指数函数调整像素强度。这种方法在提高图像整体亮度和视觉吸引力方面表现出色。

对比度拉伸:
对比度拉伸旨在通过拉伸指定百分位范围内的强度值来增强图像对比度。结果表明,这种技术有效地提高了图像的视觉质量。

Unsharp Masking:
Unsharp masking涉及通过减去模糊版本来创建图像的锐化版本。应用unsharp masking似乎增强了图像的细节和边缘

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

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

相关文章

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)

首先要说明一下原理:使用stm32无法准确产生1us的时间,但是超声波测距一定要依赖时间,时间不准,距离一定不准,这是要肯定的,但是在不准确的情况下,要测量一个比较准确的时间,那么只能…

同一个Unity项目打开两个Unity Editor实例

特殊情况下,同一个项目需要同时打开两个编辑器做测试,如多人在线游戏,或者有通信功能的时候就有这样的需求。同时也为了方便调试和观察日志。并且修改的是同一份代码。 命令介绍: 实现思路: 使用 mklink 命令 分别创建…

使用 huggingface_hub 镜像下载 大模型

download.py 👇 import os # 配置 hf镜像 os.environ[HF_ENDPOINT] https://hf-mirror.com# 设置保存的路径 local_dir "XXXXXX"# 设置仓库id model_id "sensenova/piccolo-large-zh"cmd f"huggingface-cli download --resume-downlo…

【MySQL】库的相关操作 + 库的备份和还原

库的操作 前言正式开始创建数据库删除数据库编码集查看系统默认字符集以及校验规则字符集校验规则 所有支持的字符集和校验规则所有字符集所有校验规则 指明字符集和校验规则创建数据库相同的字符集用不同的校验规则读取会出现什么情况 alter修改数据库show create databasealt…

瑞萨e2studio(29)----SPI速率解析

瑞萨e2studio.29--SPI速率解析 概述视频教学时钟配置解析RA4M2的BRR值时钟速率7.5M下寄存器值3K下寄存器值 概述 在嵌入式系统的设计中,串行外设接口(SPI)的通信速率是一个关键参数,它直接影响到系统的性能和稳定性。瑞萨电子的…

C# Onnx LSTR 基于Transformer的端到端实时车道线检测

目录 效果 模型信息 项目 代码 下载 效果 模型信息 lstr_360x640.onnx Inputs ------------------------- name:input_rgb tensor:Float[1, 3, 360, 640] name:input_mask tensor:Float[1, 1, 360, 640] -----------------…

适配器模式 rust和java的实现

文章目录 适配器模式介绍何时使用应用实例优点缺点使用场景 实现java实现rust 实现 rust代码仓库 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能…

【每日一题】区域和检索 - 数组可修改

文章目录 Tag题目来源解题思路方法一:分块方法二:线段树方法三:树状数组 写在最后 Tag 【树状数组】【线段树】【分块】【前缀和】【设计类】【2023-11-13】 题目来源 307. 区域和检索 - 数组可修改 解题思路 使用前缀和解决不行吗&#x…

centos利用find提权反弹shell

需要说明的是利用find命令进行提权的方式已经不存在了,因为Linux默认不会为find命令授予suid权限,这里只是刻意的制造出了一种存在提权的环境 首先我们先介绍一下find命令,find命令主要用来在Linux中查找文件使用,它可以进行最基础…

Brute Force

Brute Force "Brute Force"(暴力破解)指的是一种通过尝试所有可能的组合来获取访问、解密或破解信息的攻击方法。这种攻击方法通常是基于暴力和不断尝试的,不依赖漏洞或弱点。通常用于破解密码、破坏系统或获取未经授权的访问权限…

数据分析实战 | 逻辑回归——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接:https://download.csdn.net/d…

MongoDB基础知识~

引入MongoDB: 在面对高并发,高效率存储和访问,高扩展性和高可用性等的需求下,我们之前所学习过的关系型数据库(MySql,sql server…)显得有点力不从心,而这些需求在我们的生活中也是随处可见的,例如在社交中…

JVM如何运行,揭秘Java虚拟机运行时数据区

目录 一、概述 二、程序计数器 三、虚拟机栈 四、本地方法栈 五、本地方法接口 六、堆 (一)概述 (二)堆空间细分 七、方法区 一、概述 不同的JVM对于内存的划分方式和管理机制存在部分差异,后续针对HotSpot虚…

CSS特效007:绘制3D文字,类似PS效果

总第 007 篇文章, 查看专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花…

2023年数维杯国际大学生数学建模挑战赛A题

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 cs数模团队在数维杯前为大家提供了许多资料的内容呀&#xff0…

贪吃蛇和俄罗斯方块

贪吃蛇 一、创建新项目 创建一个新的项目,并命名。 创建一个名为images的文件夹用来存放游戏相关图片。 然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类, 创建一个com.xxx.controller的包用来存放启动的入口类(控制类) …

重复性工作自动化解决方案——影刀

以前,影刀是一个邂逅的初见小工具,新奇在里头,踌躇在外头; 现在,影刀是一个稳定的职场贾维斯,高效在里头,悠闲在外头; 以后,影刀是一个潜力的知己老司机,有序…

2019年五一杯数学建模A题让标枪飞解题全过程文档及程序

2020年五一杯数学建模 A题 让标枪飞 原题再现 标枪的投掷是一项历史悠久的田径比赛项目。标枪投掷距离的远近受到运动员水平(出手速度、出手角、初始攻角、出手高度、出手时标枪的初始俯仰角速度等),标枪的技术参数(标枪的长度、…

网络运维Day14

监控概述 监控的目的 报告系统运行状况每一部分必须同时监控内容包括吞吐量、反应时间、使用率等提前发现问题进行服务器性能调整前,知道调整什么找出系统的瓶颈在什么地方 监控的资源类别 公开数据 Web、FTP、SSH、数据库等应用服务TCP或UDP端口 私有数据 CPU、内…

互联网Java工程师面试题·微服务篇·第三弹

目录 34、什么是端到端微服务测试? 35、Container 在微服务中的用途是什么? 36、什么是微服务架构中的 DRY? 37、什么是消费者驱动的合同(CDC)? 38、Web,RESTful API 在微服务中的作用是什…