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

5:OpenCV—图像亮度、对比度变换

1.更改图像和视频的亮度

更改亮度

更改图像的亮度是常用的点操作。在此操作中,图像中每个像素的值应增加/减少一个常数。要更改视频的亮度,应对视频中的每一帧执行相同的操作。

如果要增加图像的亮度,则必须为图像中的每个像素添加一些正常量值。

new_image (i, j) = image(i, j) + c

如果要降低图像的亮度,则必须从图像中的每个像素中减去一些正常量值。

new_image (i, j) = 图像(i, j) - c

例如,说,这是您的原始图像。假设图像的数据类型是CV_8U(即 - 图像中的像素是 8 位无符号的。因此,图像中每个像素的有效值范围应为 0 - 255。

原始图像

假设您想将原始图像的亮度提高 60。因此,您应该为原始图像中的每个像素添加 60。您必须通过在原始图像上加 60 来确保输出图像中的像素值不应超过允许的最大限制。如果超过最大限制,则必须分配最大值而不是正确的值。

这是亮度增加60的输出图像。您可能已经注意到,(3, 1) 位置的像素值为 255,尽管在 200 上加上 60 后,它应该是 260。这是因为此图像的最大允许像素值为 255。

假设您想将原始图像的亮度降低 20。因此,您应该从原始图像中的每个像素中减去 20。您必须确保从原始图像中减去 20 后,输出图像中的像素值不应低于允许的最小限制。如果它低于最小限制,则必须分配最小值而不是正确的值。

这是亮度降低20的输出图像。您可能已经注意到 (0, 0) 位置的像素值为 0,尽管从 8 中减去 20 后它应该是 -12。这是因为具有无符号数据类型的图像的最小允许像素值为 0。

使用 OpenCV 更改图像的亮度

需要在QT中配置包含路径及类库路径

1
2
INCLUDEPATH += D:\Application\opencvdev\opencv3.4.6\rebuild_for_qt\install\include
LIBS += D:\Application\opencvdev\opencv3.4.6\rebuild_for_qt\lib\libopencv_*.a

将上述代码片段复制并粘贴到 IDE 中并运行它。


#include <QCoreApplication>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 读取图像String rootDir = "D:/Gerry/project/opencvproj/singleandslot/OpenCV-2/ImageAndVideoHandle/resources/lena.png";Mat image = imread(rootDir);// 对图片进行亮度增强Mat imageBright50;image.convertTo(imageBright50, -1, 1, 50);Mat imageBright100;image.convertTo(imageBright100, -1, 1, 100);// 对图像进行亮度减少Mat imageDark50;image.convertTo(imageDark50, -1, 1, -50);Mat imageDark100;image.convertTo(imageDark100, -1, 1, -100);// 定义窗口标题String OriginWind = "原图像";String Bright50Wind = "增亮50";String Bright100Wind = "增亮100";String Dark50Wind = "减少亮度50";String Dark100Wind = "减少亮度100";// 创建四个窗体namedWindow(OriginWind, WINDOW_NORMAL);namedWindow(Bright50Wind, WINDOW_NORMAL);namedWindow(Bright100Wind, WINDOW_NORMAL);namedWindow(Dark50Wind, WINDOW_NORMAL);namedWindow(Dark100Wind, WINDOW_NORMAL);// 分别在四个窗口中显示出来完成的图像imshow(OriginWind, image);imshow(Bright50Wind, imageBright50);imshow(Bright100Wind, imageBright100);imshow(Dark50Wind, imageDark50);imshow(Dark100Wind, imageDark100);waitKey(0);destroyAllWindows();return a.exec();
}
亮度增加
亮度降低
解释

让我们逐行浏览上面的示例。


// Read the image file
Mat image = imread("D:/My OpenCV Website/My Guitar.jpg");// Check for failure
if (image.empty())
{cout << "Could not open or find the image" << endl;cin.get(); //wait for any key pressreturn -1;
}

此代码段从指定文件加载图像。如果加载图像失败,程序将退出。

上面的代码段将像素值增加指定的量,并将其存储在给定的输出图像中。如果指定的值为正,则输出图像的亮度将增加。如果指定的值为负,则输出图像的亮度将降低。

Mat imageBrighnessHigh50;
image.convertTo(imageBrighnessHigh50, -1, 1, 50); //increase the brightness by 50Mat imageBrighnessHigh100;
image.convertTo(imageBrighnessHigh100, -1, 1, 100); //increase the brightness by 100Mat imageBrighnessLow50;
image.convertTo(imageBrighnessLow50, -1, 1, -50); //decrease the brightness by 50Mat imageBrighnessLow100;
image.convertTo(imageBrighnessLow100, -1, 1, -100); //decrease the brightness by 100

void Mat::convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const

此函数将每个像素值转换为目标数据类型,并按照以下公式更改值。

pixel_value_of_output_image(x, y) = pixel_value_of_input_image(x, y) * alpha + beta;

  1. m - 输出图像。如果需要,将重新分配此数据结构。
  2. rtype - 输出图像的类型。如果 rtype 为负值,则输出图像的类型将与输入图像的类型相同。
  3. alpha - 在分配给输出图像之前,输入图像中的每个像素将乘以此数字。
  4. beta - 此值将添加到输入图像中的每个像素并分配给输出图像。

//Defining window names for above images
String windowNameOriginalImage = "Original Image";
String windowNameBrightnessHigh50 = "Brightness Increased by 50";
String windowNameWithBrightnessHigh100 = "Brightness Increased by 100";
String windowNameBrightnessLow50 = "Brightness Decreased by 50";
String windowNameBrightnessLow100 = "Brightness Decreased by 100";//Create and open windows for above images
namedWindow(windowNameOriginalImage, WINDOW_NORMAL);
namedWindow(windowNameBrightnessHigh50, WINDOW_NORMAL);
namedWindow(windowNameWithBrightnessHigh100, WINDOW_NORMAL);
namedWindow(windowNameBrightnessLow50, WINDOW_NORMAL);
namedWindow(windowNameBrightnessLow100, WINDOW_NORMAL);//Show above images inside the created windows.
imshow(windowNameOriginalImage, image);
imshow(windowNameBrightnessHigh50, imageBrighnessHigh50);
imshow(windowNameWithBrightnessHigh100, imageBrighnessHigh100);
imshow(windowNameBrightnessLow50, imageBrighnessLow50);
imshow(windowNameBrightnessLow100, imageBrighnessLow100);

上面的代码片段将创建窗口并在其中显示图像。

上面的代码段将等待,直到按下任何键。按键后,所有创建的窗口将被销毁。

1
2
3
waitKey(0); // Wait for any key strokedestroyAllWindows(); //destroy all open windows

使用 OpenCV 更改视频的亮度


#include <QCoreApplication>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 读取图像String VideoDir = "D:/Gerry/project/opencvproj/singleandslot/OpenCV-2/ImageAndVideoHandle/resources/点云应用.mp4";// 打开视频文件并进行数据读取VideoCapture cap(VideoDir);// 定义窗口标题String OriginWind = "原视频";String Bright50Wind = "增亮50";String Bright100Wind = "增亮100";String Dark50Wind = "减少亮度50";String Dark100Wind = "减少亮度100";// 创建四个窗体namedWindow(OriginWind, WINDOW_NORMAL);namedWindow(Bright50Wind, WINDOW_NORMAL);namedWindow(Bright100Wind, WINDOW_NORMAL);namedWindow(Dark50Wind, WINDOW_NORMAL);namedWindow(Dark100Wind, WINDOW_NORMAL);while(true){// 可以把视频中每一帧看成一张图像来进行处理Mat frame;// 通过视频捕获对象来获取每一帧cap.read(frame);// 对图片进行亮度增强Mat imageBright50;frame.convertTo(imageBright50, -1, 1, 50);Mat imageBright100;frame.convertTo(imageBright100, -1, 1, 100);// 对图像进行亮度减少Mat imageDark50;frame.convertTo(imageDark50, -1, 1, -50);Mat imageDark100;frame.convertTo(imageDark100, -1, 1, -100);// 分别在四个窗口中显示出来完成的图像imshow(OriginWind, frame);imshow(Bright50Wind, imageBright50);imshow(Bright100Wind, imageBright100);imshow(Dark50Wind, imageDark50);imshow(Dark100Wind, imageDark100);if (waitKey(10) == 27){cout << "ESC退出程序";break;}}destroyAllWindows();return a.exec();
}

2.更改图像和视频的对比度

更改图像的对比度也是一种常用的点操作。在此操作中,图像中每个像素的值应乘以不等于 1 的正常数。要更改视频的对比度,应对视频中的每个帧执行相同的操作。为了增加图像的对比度,图像中的每个像素都应乘以大于1的正常数。

new_image (i, j) = image(i, j) * c (c > 1)

为了降低图像的对比度,图像中的每个像素都应乘以小于该常数的正常数。

new_image (i, j) = image(i, j) * c (0 < c < 1)

例如,说,这是您的原始图像。假设图像的数据类型为 CV_8U.(即 - 图像中的像素是 8 位无符号的。请参阅 OpenCV C++ API 了解更多信息。因此,图像中每个像素的有效值范围应为 0 - 255。

原始图像

假设您想将原始图像的对比度提高 2 倍。因此,您应该将原始图像中的每个像素乘以 2。必须确保输出图像中的像素值在乘法后不应超过允许的最大限制。如果超过最大限制,则必须分配最大值而不是正确的值。

这是对比度增加 2 倍的图像。您可能已经注意到 (0, 0) 位置的像素值为 255,尽管将 288 乘以 144 后它应该是 2。这是因为此图像的最大允许像素值为 255。

对比度增加 2 倍的图像

比如说,你想将原始图像的对比度减半。因此,您应该将原始图像中的每个像素乘以 0.5。这是对比度降低的图像。

使用 OpenCV 更改图像的对比度


#include <QCoreApplication>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 从文件读取到对象中String rootDir = "D:/Gerry/project/opencvproj/singleandslot/OpenCV-2/ImageAndVideoHandle/resources/lena.png";Mat image = imread(rootDir);// 增加图像对比度Mat constrast2;image.convertTo(constrast2, -1, 2, 0);Mat constrast4;image.convertTo(constrast4, -1, 4, 0);// 减少图形对比度Mat constrastLow_0_5;image.convertTo(constrastLow_0_5, -1, 0.5, 0);Mat constrastLow_0_2_5;image.convertTo(constrastLow_0_2_5, -1, 0.25, 0);// 定义窗口标题String OriginWind = "原图像";String Bright50Wind = "增加2倍";String Bright100Wind = "增加4倍";String Dark50Wind = "减少0.5倍";String Dark100Wind = "减少0.25倍";// 创建四个窗体namedWindow(OriginWind, WINDOW_NORMAL);namedWindow(Bright50Wind, WINDOW_NORMAL);namedWindow(Bright100Wind, WINDOW_NORMAL);namedWindow(Dark50Wind, WINDOW_NORMAL);namedWindow(Dark100Wind, WINDOW_NORMAL);// 分别在四个窗口中显示出来完成的图像imshow(OriginWind, image);imshow(Bright50Wind, constrast2);imshow(Bright100Wind, constrast4);imshow(Dark50Wind, constrastLow_0_5);imshow(Dark100Wind, constrastLow_0_2_5);waitKey(0);destroyAllWindows();return a.exec();
}
对比度增加
对比度降低
代码解释

// Read the image file
Mat image = imread("D:/My OpenCV Website/Christmas.jpg");// Check for failure
if (image.empty())
{cout << "Could not open or find the image" << endl;cin.get(); //wait for any key pressreturn -1;
}

此代码段从指定文件加载图像。如果加载图像失败,程序将退出。

上面的代码段将像素值乘以指定的量,并将其存储在给定的输出图像中。如果指定的值大于 1,则输出图像的对比度将增加。如果指定的值小于 1,则输出图像的对比度将降低。


Mat imageContrastHigh2;
image.convertTo(imageContrastHigh2, -1, 2, 0); //increase the contrast by 2Mat imageContrastHigh4;
image.convertTo(imageContrastHigh4, -1, 4, 0); //increase the contrast by 4Mat imageContrastLow0_5;
image.convertTo(imageContrastLow0_5, -1, 0.5, 0); //decrease the contrast by 0.5Mat imageContrastLow0_25;
image.convertTo(imageContrastLow0_25, -1, 0.25, 0); //decrease the contrast by 0.25

void Mat::convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const

此函数将每个像素值转换为目标数据类型,并按照以下公式更改值。

pixel_value_of_output_image(x, y) = pixel_value_of_input_image(x, y) * alpha + beta;

  1. m - 输出图像。如果需要,将重新分配此数据结构。
  2. rtype - 输出图像的类型。如果 rtype 为负值,则输出图像的类型将与输入图像的类型相同。
  3. alpha - 在分配给输出图像之前,输入图像中的每个像素将乘以此数字。
  4. beta - 此值将添加到输入图像中的每个像素并分配给输出图像。

//Defining window names for above images
String windowNameOriginalImage = "Original Image";
String windowNameContrastHigh2 = "Contrast Increased by 2";
String windowNameContrastHigh4 = "Contrast Increased by 4";
String windowNameContrastLow0_5 = "Contrast Decreased by 0.5";
String windowNameContrastLow0_25 = "Contrast Decreased by 0.25";//Create and open windows for above images
namedWindow(windowNameOriginalImage, WINDOW_NORMAL);
namedWindow(windowNameContrastHigh2, WINDOW_NORMAL);
namedWindow(windowNameContrastHigh4, WINDOW_NORMAL);
namedWindow(windowNameContrastLow0_5, WINDOW_NORMAL);
namedWindow(windowNameContrastLow0_25, WINDOW_NORMAL);//Show above images inside the created windows.
imshow(windowNameOriginalImage, image);
imshow(windowNameContrastHigh2, imageContrastHigh2);
imshow(windowNameContrastHigh4, imageContrastHigh4);
imshow(windowNameContrastLow0_5, imageContrastLow0_5);
imshow(windowNameContrastLow0_25, imageContrastLow0_25);

上面的代码片段将创建窗口并在其中显示图像。由于窗口是通过传递标志WINDOW_NORMAL创建的,因此可以自由调整窗口大小。

上面的代码段将等待,直到按下任何键。按键后,所有创建的窗口将被销毁。

1
2
waitKey(0); // Wait for any key stroke
destroyAllWindows(); //destroy all open windows

使用 OpenCV 更改视频的对比度


#include <QCoreApplication>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);String VideoDir = "D:/Gerry/project/opencvproj/singleandslot/OpenCV-2/ImageAndVideoHandle/resources/点云应用.mp4";// 打开视频文件并进行数据读取VideoCapture cap(VideoDir);// 定义窗口标题String OriginWind = "原视频";String Bright50Wind = "增加2倍对比度";String Bright100Wind = "增加4倍对比度";String Dark50Wind = "减少0.5倍对比度";String Dark100Wind = "减少0.25倍对比度";// 创建四个窗体namedWindow(OriginWind, WINDOW_NORMAL);namedWindow(Bright50Wind, WINDOW_NORMAL);namedWindow(Bright100Wind, WINDOW_NORMAL);namedWindow(Dark50Wind, WINDOW_NORMAL);namedWindow(Dark100Wind, WINDOW_NORMAL);while(true){// 可以把视频中每一帧看成一张图像来进行处理Mat frame;// 通过视频捕获对象来获取每一帧cap.read(frame);// 对图片进行对比度增强Mat imageConstrast2;frame.convertTo(imageConstrast2, -1, 2, 0);Mat imageConstrast4;frame.convertTo(imageConstrast4, -1, 4, 0);// 对图像进行对比度减少Mat imageDark0_5;frame.convertTo(imageDark0_5, -1, 0.5, 0);Mat imageDark0_2_5;frame.convertTo(imageDark0_2_5, -1, 0.25, 0);// 分别在四个窗口中显示出来完成的图像imshow(OriginWind, frame);imshow(Bright50Wind, imageConstrast2);imshow(Bright100Wind, imageConstrast4);imshow(Dark50Wind, imageDark0_5);imshow(Dark100Wind, imageDark0_2_5);if (waitKey(10) == 27){cout << "ESC退出程序";break;}}destroyAllWindows();return a.exec();
}

相关文章:

5:OpenCV—图像亮度、对比度变换

1.更改图像和视频的亮度 更改亮度 更改图像的亮度是常用的点操作。在此操作中&#xff0c;图像中每个像素的值应增加/减少一个常数。要更改视频的亮度&#xff0c;应对视频中的每一帧执行相同的操作。 如果要增加图像的亮度&#xff0c;则必须为图像中的每个像素添加一些正常…...

Oracle 的V$ACTIVE_SESSION_HISTORY 视图

Oracle 的V$ACTIVE_SESSION_HISTORY 视图 V$ACTIVE_SESSION_HISTORY显示数据库中的 Sampled Session 活动。 它包含每秒拍摄一次的活动数据库会话的快照。如果数据库会话位于 CPU 上或正在等待不属于等待类的事件&#xff0c;则认为该会话处于活动状态。请参阅 view 以了解有…...

redis数据持久化和配置-13(配置 AOF:Appendfsync 策略)

配置 AOF&#xff1a;Appendfsync 策略 在 Redis 中配置仅附加文件 &#xff08;AOF&#xff09; 持久性机制涉及选择正确的 appendfsync 策略。此策略指示 Redis 将数据写入磁盘上的 AOF 文件的频率。策略的选择会显著影响数据安全和性能。了解这些策略之间的权衡对于确保 Re…...

【Python 算法零基础 4.排序 ② 冒泡排序】

目录 一、引言 二、算法思想 三、时间复杂度和空间复杂度 1.时间复杂度 2.空间复杂度 四、冒泡排序的优缺点 1.算法的优点 2.算法的缺点 五、实战练习 88. 合并两个有序数组 算法与思路 ① 合并数组 ② 冒泡排序 2148. 元素计数 算法与思路 ① 排序 ② 初始化计数器 ③ 遍历数组…...

Python:操作Excel设置行高和列宽

Python 操作 Excel:轻松设置行高与列宽 📊✨ 在处理 Excel 表格时,除了正确展示数据本身,合理设置行高与列宽也是提升可读性和专业度的关键因素。本文将带你了解如何使用 Python 的 openpyxl 库,优雅地控制 Excel 表格的排版布局,实现行高、列宽的灵活设置与自动适配! …...

docker-volume-backup 备份 ragflow volumes

自定义项目名称 这里我自定义了 ragflow 项目的名称&#xff0c;修改 .env&#xff0c;添加环境配置 # 自定义项目名称 COMPOSE_PROJECT_NAMEragflow创建备份脚本配置文件 在 ragflow/docker 目录下创建文件 docker-compose-backup.yml version: 3services:backup:image: o…...

Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享

乡村治理正从传统模式向“数据驱动”转型。数字乡村可视化大屏作为数据展示的核心载体&#xff0c;不仅能直观呈现乡村发展全貌&#xff0c;还能为决策提供科学依据。本文以Axure为工具&#xff0c;结合实际案例&#xff0c;分享如何从零设计一个功能完备、交互流畅的数字乡村大…...

算法第26天 | 贪心算法、455.分发饼干、376. 摆动序列、 53. 最大子序和

弹性算法理论基础 想清楚 局部最优 是什么&#xff0c;如果可以推导出全局最优&#xff0c;那就是正确的贪心算法 455. 分发饼干 题目 思路与解法 class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:res 0i 0j 0g.sort()s.sort()whi…...

PDF处理控件Aspose.PDF教程:以编程方式将 PDF 导出为 JPG

在本节中&#xff0c;我们将探讨如何使用 Aspose.PDF 库将 PDF 文档转换为 JPG 图像。Aspose.PDF 是一个功能强大且用途广泛的库&#xff0c;专为需要以编程方式处理 PDF 文件的开发人员而设计。它提供了丰富的功能&#xff0c;可用于跨多个平台创建、编辑和转换 PDF 文档。其主…...

Vue3+ElementPlus 开箱即用后台管理系统,支持白天黑夜主题切换,通用管理组件,

Vue3ElementPlus后台管理系统&#xff0c;支持白天黑夜主题切换&#xff0c;专为教育管理场景设计。主要功能包括用户管理&#xff08;管理员、教师、学生&#xff09;、课件资源管理&#xff08;课件列表、下载中心&#xff09;和数据统计&#xff08;使用情况、教学效率等&am…...

AI大模型应用之评测篇

在看到公司对于AI 工程师 的岗位要求 &#xff1a;“能够熟练使用各种自动化评测工具与方法&#xff0c;对AI 模型的输出进行有效评估” 时&#xff0c;其实比较疑惑&#xff0c;这个是对大模型能力例如像Deepseek ,GPT-4 ,千问&#xff0c;LLAMA这些模型的能力评测&#xff0c…...

力扣小题, 力扣113.路径总和II力扣.111二叉树的最小深度 力扣.221最大正方形力扣5.最长回文子串更加优秀的算法:中心扩展算法

目录 力扣113.路径总和II 力扣.111二叉树的最小深度 力扣.221最大正方形 力扣5.最长回文子串 更加优秀的算法:中心扩展算法 力扣113.路径总和II 这道题&#xff0c;让我明白回溯了到底啥意思 之前我找的时候&#xff0c;我一直在想&#xff0c;如果可以&#xff0c;请你对比…...

el-form elform 对齐方式调整

如下页面表单&#xff0c;展示后就很丑。 页面表单&#xff0c;有时候我们想着最左侧的应该合理整齐的左对齐&#xff0c;右侧的表单都是右对齐&#xff0c;这样页面看起来会整洁很多。 <el-form class"w-100 a_form" style"padding: 0 15px 0px 15px"…...

JESD204 ip核使用与例程分析(二)

JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…...

Linux shell 正则表达式高效使用

Linux正则表达式高效使用教程 正则表达式是Linux命令行中强大的文本处理工具&#xff0c;能够极大提高搜索和匹配效率。下面为新手提供一个简单教程&#xff0c;介绍如何在grep和find命令中使用正则表达式。 使用建议&#xff1a;使用grep时要加-E选项使其支持扩展正则表达式&…...

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Blurry Loading (毛玻璃加载)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— Blurry Loading 组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ ✨ 组件目标 实现一个加载进度条&#xff0c;随着加载进度的…...

C#中的ThreadStart委托

ThreadStart 委托&#xff1a; ThreadStart 是 .NET 中的一个内置委托类型&#xff0c;表示无参数且无返回值的方法。其定义如下&#xff1a; public delegate void ThreadStart(); 通常用于定义线程的入口方法。 List<ThreadStart>&#xff1a; 这是一个泛型集合&…...

GPU加速Kubernetes集群助力音视频转码与AI工作负载扩展

容器编排与GPU计算的结合&#xff0c;为追求性能优化的企业开辟了战略转型的新路径 基于GPU的托管Kubernetes集群不仅是技术选择&#xff0c;更是彻底改变企业处理高负载任务的战略部署方式。 随着人工智能和机器学习项目激增、实时数据处理需求的剧增&#xff0c;以及高性能媒…...

LeetCode[222]完全二叉树的节点个数

思路&#xff1a; 这个节点个数可以使用递归左儿子个数递归右儿子个数1&#xff0c;这个1是根节点&#xff0c;最后结果为节点个数&#xff0c;但我们没有练习到完全二叉树的性质. 完全二叉树的性质是&#xff1a;我简单说一下&#xff0c;大概就是其他节点都满了&#xff0c;就…...

DPDK 技术详解:榨干网络性能的“瑞士军刀”

你是否曾感觉&#xff0c;即使拥有顶级的服务器和万兆网卡&#xff0c;你的网络应用也总是“喂不饱”硬件&#xff0c;性能总差那么一口气&#xff1f;传统的网络处理方式&#xff0c;就像在高速公路上设置了太多的收费站和检查点&#xff0c;限制了数据包的“奔跑”速度。 今…...

anaconda的c++环境与ros2需要的系统变量c++环境冲突

在conda虚拟环境中运行有ros2的代码报错 ImportError: /home/user/anaconda3/envs/myenv/bin/../lib/libstdc.so.6: version GLIBCXX_3.4.30 not found(required by /opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.…...

Docker 疑难杂症解决指南大纲

一、Docker 基础问题排查 Docker 服务无法启动 错误提示:Cannot connect to the Docker daemon 可能原因:Docker 服务未运行、权限问题、端口冲突。 解决方案: 检查服务状态:systemctl status docker 重启服务:systemctl restart docker 用户权限:将用户加入 docker 组。…...

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务

深入解析Spring Boot与Kafka集成&#xff1a;构建高效消息驱动微服务 引言 在现代微服务架构中&#xff0c;消息队列是实现服务解耦和异步通信的重要组件。Apache Kafka作为分布式流处理平台&#xff0c;因其高吞吐量、低延迟和可扩展性&#xff0c;成为企业级应用的首选。本…...

Python 实现web请求与响应

目录 一、什么是web 请求与响应&#xff1f; 1、Web 请求 2、web 响应 3、HTTP协议概述 4、常见的HTTP状态码包括 二、Python 的requests库 1、安装requests库 2、发送GET请求 3、发送POST请求 4、处理响应头和状态码 5、发送带查询参数的GET请求 6、发送带表单数据…...

演示:【WPF-WinCC3D】 3D工业组态监控平台源代码

一、目的&#xff1a;分享一个应用WPF 3D开发的3D工业组态监控平台源代码 二、功能介绍 WPF-WinCC3D是基于 WPF 3D研发的工业组态软件&#xff0c;提供将近200个预置工业模型&#xff08;机械手臂、科幻零部件、熔炼生产线、机加生产线、管道等&#xff09;&#xff0c;支持组态…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.4 数据库与表的基本操作(DDL/DML语句)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 1.4 数据库与表的基本操作&#xff08;DDL/DML语句&#xff09;1.4.1 数据库生命周期管理&#xff08;DDL核心&#xff09;1.4.1.1 创建数据库&#xff08;CREATE DATABASE&…...

CUDA加速的线性代数求解器库cuSOLVER

cuSOLVER是NVIDIA提供的GPU加速线性代数库&#xff0c;专注于稠密和稀疏矩阵的高级线性代数运算。它建立在cuBLAS和cuSPARSE之上&#xff0c;提供了更高级的线性代数功能。 cuSOLVER主要功能 1. 稠密矩阵运算 矩阵分解: LU分解 (gesvd) QR分解 (geqrf) Cholesky分解 (potrf…...

Oracle 物理存储与逻辑管理

1. 表空间&#xff08;Tablespace&#xff09; 定义&#xff1a; 表空间是Oracle中最高级别的逻辑存储容器&#xff0c;由一个或多个物理数据文件&#xff08;Datafile&#xff09;组成。所有数据库对象&#xff08;如表、索引&#xff09;的逻辑存储均属于某个表空间。 类型与…...

vscode优化使用体验篇(快捷键)

本文章持续更新中 最新更新时间为2025-5-18 1、方法查看方法 1.1当前标签跳到新标签页查看方法实现 按住ctrl 鼠标左键点击方法。 1.2使用分屏查看方法实现(左右分屏) 按住ctrl alt 鼠标左键点击方法。...

如何在电脑上登录多个抖音账号?多开不同IP技巧分解

随着短视频的爆发式增长&#xff0c;抖音已经成为许多人生活和工作的必备平台。不论是个人内容创作者、品牌商家&#xff0c;还是营销人员&#xff0c;都可能需要管理多个抖音账号。如何在电脑上同时登录多个抖音账号&#xff0c;提升工作效率&#xff0c;避免频繁切换账号的麻…...