《 OpenCV 环境搭建》
《OpenCV 环境搭建》
- 一、OpenCV 简介
- 二、准备工作
- 三、安装 OpenCV
- (一)获取安装包
- (二)安装过程
- 四、配置环境变量
- (一)系统环境变量配置
- (二)项目环境变量配置(以 Visual Studio 为例)
- 五、测试安装是否成功
- (一)C++ 代码示例及运行测试
- (二)可能出现的错误及解决方法
- 六、常见问题解答
一、OpenCV 简介
OpenCV(Open Source Computer Vision Library),即开源计算机视觉库,是计算机视觉领域的得力工具。它犹如一座宝藏,蕴含了丰富的图像处理和计算机视觉算法,能够在多个平台上稳定运行,包括广为人知的 Windows、Linux、macOS 等操作系统,为开发者提供了极大的便利和广阔的应用空间。
在实际应用中,OpenCV 的身影随处可见,其重要性不言而喻。于安防监控而言,它能对监控画面进行精准的目标检测与跟踪,无论是识别潜在的危险人物,还是追踪可疑物品的移动轨迹,都能高效完成,为安全防范工作提供有力支持;在智能交通领域,通过对车辆图像和视频的分析,实现车牌识别、车辆检测与交通流量统计等功能,有助于优化交通管理,提升道路通行效率;工业生产线上,它可以对产品进行细致的缺陷检测和尺寸测量,确保产品质量符合标准,助力工业自动化的发展;在医疗影像处理方面,辅助医生对 X 光片、CT 扫描等影像进行分析,例如检测病灶、测量器官尺寸等,提高诊断的准确性和效率,为患者的治疗提供更精准的依据。此外,在日常生活中,像智能手机的人脸识别解锁、图像后期处理软件中的各种特效应用等,也都离不开 OpenCV 的技术支持。其强大的功能和广泛的应用场景,使得掌握 OpenCV 成为众多开发者的必备技能,也让它在计算机视觉领域占据着举足轻重的地位,不断推动着相关技术的发展与创新,为人们的生活和各行业的进步带来诸多益处和变革。
二、准备工作
系统要求
OpenCV 的环境搭建对系统有一定要求,以下为你详细介绍:
- 操作系统:它支持多种常见的操作系统,如 Windows、Linux、macOS 等。不同操作系统下的搭建步骤会稍有差异,本文主要聚焦于 Windows 系统下的搭建情况。
- 处理器:支持多种处理器架构,包括 x86、x86_64、ARM 和 MIPS 等,像 Intel、AMD、ARM Cortex 等处理器都能运行 OpenCV。不过,若你要进行计算密集型的图像处理任务,较强的处理器能带来更好的性能表现。
- 内存:其内存消耗取决于具体的应用和图像处理算法。一般来说,较大的内存容量可以提供更流畅的处理过程以及更强的处理能力,尤其是面对大规模图像处理任务时,足够的内存很关键。
- 显卡:如果你使用 OpenCV 进行计算密集型的图像处理任务,例如图像滤波、图像识别和目标跟踪等,那么可以考虑使用支持 GPU 加速的显卡。OpenCV 提供了与 CUDA 和 OpenCL 等 GPU 计算框架的集成,能借助 GPU 的并行计算能力提高处理速度。
所需软件及下载安装
搭建 OpenCV 环境需要准备以下软件:
- Visual Studio:它是常用的集成开发环境,不同版本基本都能用于 OpenCV 开发,例如 Visual Studio 2019、Visual Studio 2022 等。以 Visual Studio 2019 为例,你可以访问 Visual Studio 官方网站下载安装程序,双击启动安装向导,在安装向导中选择 “使用 C++ 的桌面开发” 工作负载后点击 “安装” 按钮开始下载并安装所选工作负载。安装完成后,启动 Visual Studio 2019,并完成如选择颜色主题、注册产品等初始设置。同时,还需要正确配置系统环境变量,在 Windows 搜索框中输入 “环境变量” 并选择 “编辑系统环境变量”,在系统属性窗口中点击 “环境变量” 按钮,在 “系统变量” 区域中找到名为 “Path” 的变量,选择它然后点击 “编辑”,点击 “新建”,添加 Visual Studio 的安装目录(通常是 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community ,其中 Community 是社区版,其他版本可能有所不同),同样地,添加 Visual Studio 的 VCTargets 路径(例如 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160 ),最后点击 “确定” 保存更改,并重启计算机以使更改生效。
- OpenCV:可以到 OpenCV 的官网(http://opencv.org/)下载适合 Windows 系统的安装包,根据自身电脑是 32 位还是 64 位系统选择对应的版本进行下载。比如下载完成后得到.exe 格式的安装文件,双击运行进行解压安装,选择合适的安装目录即可。安装完毕之后,在其安装目录下能看到如 build 等重要文件夹,build 文件夹内包含了后续配置和使用 OpenCV 时要用到的一些库文件等内容。
另外,有些情况下还可能会用到 CMake(如果从源码编译 OpenCV 等情况时需要),同样可从其官方网站下载并运行安装程序进行安装。
三、安装 OpenCV
(一)获取安装包
首先,我们需要从 OpenCV 官网(http://opencv.org/)获取适合 Windows 系统的安装包。进入官网后,找到 “Releases” 板块,在这里可以看到不同版本的 OpenCV 发布信息。在选择版本时,要综合考虑自身需求以及与已安装软件的兼容性。一般来说,较新的版本会包含更多功能和优化,但也可能存在一些兼容性问题需要解决。比如,不同版本的 OpenCV 对 Visual Studio 的支持有所不同,存在着对应关系,像 vc14 对应的是 VS2015,vc15 对应的是 VS2017 等。所以要根据你电脑上安装的 Visual Studio 版本来选择合适的 OpenCV 版本,确保二者能够良好配合使用。
同时,要明确电脑是 32 位还是 64 位系统,选择对应的安装包进行下载。例如,如果你的电脑是 64 位系统且安装了 VS2019,那就可以选择适合 64 位系统且与 VS2019 兼容的较新版本的 OpenCV 安装包,如 OpenCV 4.x 系列等(具体以实际兼容性和需求为准)。下载完成后,通常会得到.exe 格式的安装文件,后续便可以进行安装操作了。
(二)安装过程
以下是以 Windows 系统为例的安装包解压和安装步骤:
-
解压安装包:
- 找到下载好的.exe 格式的 OpenCV 安装文件,双击运行它,此时会弹出解压路径选择界面。要特别注意,安装路径最好选择英文路径,避免出现中文或特殊字符,防止后续使用过程中出现不必要的问题(例如路径识别错误等情况)。比如可以选择像 “D:\opencv” 这样的路径作为安装目录,然后点击 “Extract” 按钮开始解压,等待解压完成。
- 解压完毕之后,在其安装目录下能看到如 “build” 等重要文件夹,“build” 文件夹内包含了后续配置和使用 OpenCV 时要用到的一些库文件等内容,所以这个文件夹在后续操作中会经常用到,要清楚其位置。
-
配置环境变量:
- 按下 “Win + E” 组合键打开资源管理器,右键点击 “此电脑”,选择 “属性”。
- 在弹出的窗口中,点击 “高级系统设置”,接着在新窗口中点击 “环境变量” 按钮。
- 在 “系统变量” 区域中找到名为 “Path” 的变量,选择它然后点击 “编辑”。
- 点击 “新建”,添加 OpenCV 安装目录下的 “bin” 文件夹路径(例如如果你的 OpenCV 安装在 “D:\opencv”,那就添加 “D:\opencv\build\x64\vc15\bin”,这里的 “vc15” 要根据你下载的 OpenCV 版本对应的 Visual Studio 版本来定),添加完成后点击 “确定” 保存更改,这样系统就能找到 OpenCV 相关的动态库了。
-
在 Visual Studio 中配置 OpenCV(以新建控制台应用程序为例):
- 打开 Visual Studio 软件,点击 “新建项目”,选择 “Win32 控制台应用程序”,输入项目名称后点击 “确定”,再点击 “完成” 创建项目。
- 点击菜单栏中的 “项目” 然后选择 “属性”,进行如下配置:
- 配置包含目录:依次选择 “VC++ 目录” - “包含目录” - “编辑”,添加以下三个路径(假设 OpenCV 安装在 “D:\opencv”):“D:\opencv\build\include”、D:\opencv\build\include\opencv”、“D:\opencv\build\include\opencv2”,添加完成后点击 “确定”。
- 配置库目录:选择 “VC++ 目录” - “库目录” - “编辑”,将 “D:\opencv\build\x64\vc15\lib”(同样,“vc15” 依据实际情况调整)添加进去,点击 “确定”。
- 配置附加依赖项:选择 “链接器” - “输入” - “附加依赖项” - “编辑”,根据是 Debug 还是 Release 模式添加相应的库文件名。例如在 Debug 模式下,如果是 OpenCV 4.x 版本,一般添加 “opencv_world4xxd.lib”(这里的 “xx” 代表具体版本号);在 Release 模式下添加 “opencv_world4xx.lib”。添加完成后点击 “确定” 保存设置。
完成以上步骤后,基本就完成了 OpenCV 在 Windows 系统下的安装和配置工作,可以编写代码测试一下环境是否搭建成功了,比如编写一个简单的读取并显示图片的代码来验证(代码示例可参考:#include <opencv2/opencv.hpp> #include using namespace std; using namespace cv; int main() { Mat src = imread(“D:\Desktop\123.png”); imshow(“显示一张图片”, src); waitKey(0); return 0; })。
四、配置环境变量
(一)系统环境变量配置
在 Windows 系统中,按下 “Win+R” 组合键,调出 “运行” 对话框,输入 “sysdm.cpl” 后回车,即可打开 “系统属性” 窗口。在 “系统属性” 窗口中,切换到 “高级” 选项卡,然后点击 “环境变量” 按钮。在 “系统变量” 区域中找到 “Path” 变量,选中它并点击 “编辑” 按钮。在弹出的编辑窗口中,点击 “新建”,将 OpenCV 安装目录下的 “bin” 文件夹路径添加进去(例如,如果 OpenCV 安装在 “D:\opencv”,则添加 “D:\opencv\build\x64\vc15\bin”,这里的 “vc15” 要根据你下载的penCV 版本对应的 Visual Studio 版本来定)。这一步的作用是让系统能够找到 OpenCV 的可执行文件和动态链接库,以便在运行使用 OpenCV 的程序时能够正确加载所需的库文件。
需要注意的是,如果你的系统是 32 位的,则需要选择 “x86” 文件夹下的相应路径进行添加,确保与系统架构匹配,否则可能会导致程序运行时找不到库文件或出现兼容性问题。添加完成后,依次点击 “确定” 按钮关闭各个窗口,保存环境变量的设置。
(二)项目环境变量配置(以 Visual Studio 为例)
-
创建新项目:
- 打开 Visual Studio 软件,点击 “文件” 菜单,选择 “新建”->“项目”。
- 在弹出的 “新建项目” 对话框中,选择 “控制台应用程序”(当然,也可以根据实际需求选择其他合适的项目类型,如 Windows 桌面向导应用程序等),并确保选择 “C++” 作为编程语言。输入项目名称和保存位置后,点击 “确定” 按钮创建项目。
-
配置项目属性:
- 右键点击项目名称,在弹出的菜单中选择 “属性”,打开项目属性窗口。
- 配置包含目录:在项目属性窗口中,展开 “VC++ 目录” 选项,点击 “包含目录”,然后点击右侧的 “编辑” 按钮。添加以下三个路径(假设 OpenCV 安装在 “D:\opencv”):“D:\opencv\build\include”、“D:\opencv\build\include\opencv”、D:\opencv\build\include\opencv2”。这些路径包含了 OpenCV 的头文件,添加后,项目在编译时就能找到所需的头文件,从而正确识别和使用 OpenCV 的函数和类。添加完成后点击 “确定”。
- 配置库目录:同样在 “VC++ 目录” 下,点击 “库目录”,再点击 “编辑” 按钮,将
“D:\opencv\build\x64\vc15\lib”(同样,“vc15” 依据实际情况调整)添加进去,点击
“确定”。这一步是让项目知道在哪里找到 OpenCV 的库文件,这些库文件包含了 OpenCV 的实现代码,对于链接和生成可执行文件至关重要。 - 配置附加依赖项:在项目属性窗口中,展开 “链接器” 选项,点击 “输入”,然后在 “附加依赖项” 处点击 “编辑” 按钮。根据是 Debug 还是 Release 模式添加相应的库文件名。例如在 Debug 模式下,如果是 OpenCV 4.x 版本,一般添加 “opencv_world4xxd.lib”(这里的 “xx” 代表具体版本号);在 Release 模式下添加 “opencv_world4xx.lib”。这些库文件是实际的代码库,在链接阶段会与项目的目标文件进行链接,生成最终的可执行文件。添加完成后点击 “确定” 保存设置。
完成以上配置后,点击 “确定” 关闭项目属性窗口,至此,在 Visual Studio 项目中完成了 OpenCV 的环境配置,可以开始编写使用 OpenCV 的代码了。例如,可以在项目的源文件中编写代码来读取和显示一张图片,以测试 OpenCV 环境是否配置成功:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int main()
{Mat src = imread("D:\\Desktop\\123.png");if (src.empty()){cout << "无法读取图片!" << endl;return -1;}imshow("显示一张图片", src);waitKey(0);return 0;
}
在上述代码中,首先包含了 OpenCV 的头文件,然后使用imread函数读取一张图片,如果读取成功,则使用imshow函数显示图片,并通过waitKey函数等待用户按键操作,最后返回 0 表示程序正常结束。如果运行程序后能够成功显示指定的图片,说明 OpenCV 环境已经正确配置。
五、测试安装是否成功
(一)C++ 代码示例及运行测试
以下是一段使用 C++ 结合 OpenCV 读取和显示一张图片的简单代码示例:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int main()
{Mat src = imread("D:\\Desktop\\123.png");if (src.empty()){cout << "无法读取图片!" << endl;return -1;}imshow("显示一张图片", src);waitKey(0);return 0;
}
在这段代码中:
- 首先通过#include <opencv2/opencv.hpp>包含了 OpenCV 的头文件,这样才能使用 OpenCV 相关的函数和类等。using namespace std;和using namespace cv;声明了命名空间,方便后续代码书写。
- Mat src = imread(“D:\Desktop\123.png”);这行代码使用imread函数尝试从指定路径(这里是D:\Desktop\123.png,你可以根据实际图片所在路径进行修改,注意路径中的斜杠要使用双斜杠转义)读取图片,并将读取到的图片数据存储在Mat类型的变量src中。之后通过if (src.empty())判断是否成功读取到图片,如果src为空,说明读取失败,会输出提示信息并返回错误码。
- 若图片读取成功,则使用imshow(“显示一张图片”, src);函数将图片显示在名为 “显示一张图片”的窗口中,最后waitKey(0);会让程序暂停,等待用户按键操作,按任意键后程序继续执行并返回 0,表示正常结束。
运行这段代码来测试 OpenCV 环境是否搭建成功。编译运行代码后,如果能够正常弹出一个窗口显示出指定的图片,那么恭喜你,OpenCV 环境搭建成功了。
(二)可能出现的错误及解决方法
- 找不到库文件问题:
- 现象:编译或者运行代码时,可能会提示类似 “无法加载 DLL‘xxxx.dll’:找不到指定的模块” 这样的错误信息。
- 排查思路:
- 首先确认环境变量配置是否正确,检查系统环境变量中是否添加了 OpenCV 安装目录下的bin文件夹路径(例如如果 OpenCV 安装在D:\opencv,则应添加D:\opencv\build\x64\vc15\bin,这里的vc15要根据你下载的 OpenCV 版本对应的 Visual Studio 版本来定)。并且要注意如果是 32 位系统,要选择对应的x86文件夹下的路径添加,确保与系统架构匹配。
- 可以借助工具进行排查,比如使用 Dependency Walker(可从http://www.dependencywalker.com/ 下载),通过它打开你的程序生成的可执行文件(.exe 文件)或者相关的 DLL 文件,查看依赖项,若有标记或者缺失的项就是电脑缺少的依赖,再用 Everything(可从 http://www.voidtools.com/ 下载)工具查看电脑是否真的缺少该项,对于缺少的系统库文件(例如常见的 MSVCP140D.DLL 等),可以到网上查找并下载放置到对应系统文件夹(System32 和 SysWOW64 等,注意区分 32 位和 64 位文件放置位置),同时检查环境变量配置是否正确引导程序找到这些文件。
- 图片无法显示问题:
- 现象:运行代码后窗口没有正常显示图片,或者图片一闪而过等情况。
- 排查思路:
- 检查图片路径是否正确,确保imread函数中传入的图片路径是准确存在的,建议优先使用绝对路径来避免相对路径带来的问题,可以尝试在资源管理器中直接复制图片的完整路径粘贴到代码中(注意斜杠转义)。
- 查看代码中是否正确调用了waitKey函数,若没有waitKey函数或者参数设置不当,可能会导致图片无法正常显示或者一闪而过,像waitKey(0)表示无限等待用户按键,确保代码中有类似的设置来维持图片显示窗口。
- 确认 OpenCV 安装是否正确,有可能在安装过程中出现了问题,比如库文件损坏等情况,可以尝试重新安装 OpenCV,并严格按照正确的安装步骤进行操作,确保各个环节配置准确无误。
- 还要考虑图片本身是否存在问题,例如图片格式是否被 OpenCV 支持(常见的 jpg、png 等格式一般都支持,但一些特殊格式可能不行),可以尝试更换一张其他正常的图片来测试是否能够正常显示,如果其他图片可以正常显示,那么可能就是原图片本身有损坏等情况导致无法正确打开和显示。
总之,在测试过程中遇到问题不要慌张,按照上述的排查思路逐步分析,一般都能够解决环境搭建和使用中出现的常见问题,顺利使用 OpenCV 进行后续的开发工作。
六、常见问题解答
在 OpenCV 的安装和配置过程中,可能会遇到一些问题,以下是一些常见问题及其解决方案:
- 问题:编译时出现 “无法打开包括文件: ‘opencv2/opencv.hpp’” 的错误。
- 原因:项目的包含目录没有正确配置,导致编译器无法找到 OpenCV 的头文件。
- 解决方案:检查项目属性中的 “VC++ 目录”->“包含目录”,确保已添加 OpenCV 安装目录下的 “include” 文件夹及其子文件夹(例如 “D:\opencv\build\include”、“D:\opencv\build\include\opencv”、“D:\opencv\build\include\opencv2”)。
- 问题:链接时出现 “无法解析的外部符号” 错误,例如 “error LNK2019: 无法解析的外部符号 _cv::imread”。
- 原因:项目的库目录或附加依赖项没有正确配置,导致链接器无法找到 OpenCV 的库文件。
- 解决方案:首先检查项目属性中的 “VC++ 目录”->“库目录”,确认已添加 OpenCV 安装目录下的 “lib” 文件夹(例如 “D:\opencv\build\x64\vc15\lib”)。然后,检查 “链接器”->“输入”->“附加依赖项”,根据是 Debug 还是 Release 模式,确保已添加相应的库文件名(如 Debug 模式下的 “opencv_world4xxd.lib”,Release 模式下的 “opencv_world4xx.lib”,其中 “xx” 为具体版本号)。
- 问题:运行时出现 “找不到指定的模块” 错误,提示缺少某个.dll 文件,如 “无法加载 DLL‘opencv_world4xx.dll’:找不到指定的模块”。
- 原因:系统环境变量没有正确配置,或者缺少 OpenCV 的依赖项。
- 解决方案:首先检查系统环境变量中的 “Path” 变量,确保已添加 OpenCV 安装目录下的 “bin” 文件夹路径(例如 “D:\opencv\build\x64\vc15\bin”)。如果问题仍然存在,可以使用 Dependency Walker 等工具检查程序的依赖项,确定缺少的.dll 文件,并将其所在路径添加到系统环境变量中。另外,也可以尝试重新安装 OpenCV,确保安装过程中没有出现错误。
- 问题:在配置过程中,选择了错误的 Visual Studio 版本或 OpenCV 版本,导致兼容性问题。
- 原因:不同版本的 OpenCV 对 Visual Studio 的支持有所不同,需要确保二者版本兼容。
- 解决方案:仔细查阅 OpenCV 官方文档,确定所使用的 Visual Studio 版本与 OpenCV 版本的兼容性。如果版本不兼容,可以尝试更换为兼容的版本,或者参考相关的教程和论坛,了解如何解决特定版本组合下的兼容性问题。
- 问题:在使用 CMake 进行编译时,出现 “CMake Error: The following variables are used in this project, but they are set to NOTFOUND” 等错误。
- 原因:CMake 无法找到所需的依赖项或库文件,可能是因为环境变量配置不正确,或者依赖项没有正确安装。
- 解决方案:检查系统环境变量,确保已正确设置相关的路径,如 OpenCV 的安装目录、CMake 的安装目录等。同时,确保已安装了所有必要的依赖项,例如在使用 CMake 编译 OpenCV 时,可能需要安装 Python、Numpy 等依赖库。可以参考 OpenCV 的官方文档和 CMake 的相关文档,了解具体的依赖项要求和解决方法。
总之,在遇到问题时,要仔细查看错误信息,分析可能的原因,并逐步排查。
相关文章:
《 OpenCV 环境搭建》
《OpenCV 环境搭建》 一、OpenCV 简介二、准备工作三、安装 OpenCV(一)获取安装包(二)安装过程 四、配置环境变量(一)系统环境变量配置(二)项目环境变量配置(以 Visual S…...
【阅读记录-章节7】Build a Large Language Model (From Scratch)
系列文章目录 【阅读记录-章节1】Build a Large Language Model (From Scratch) 【阅读记录-章节2】Build a Large Language Model (From Scratch) 【阅读记录-章节3】Build a Large Language Model (From Scratch) 【阅读记录-章节4】Build a Large Language Model (From Scr…...
在js中实现下载base64数据,兼容低版本
详细步骤如下 1、解析 Base64 数据: 如果数据流中包含前缀 data:…;base64,,先分离 MIME 类型和 Base64 数据部分。如果没有前缀,假设默认 MIME 类型(如 application/octet-stream)。 2、Base64 解码: 使…...
垃圾分割数据集labelme格式659张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):659 标注数量(json文件个数):659 标注类别数:1 标注类别名称:["garbage"] 每个类别标注的框数&#…...
深入探索 npm cache clean --force:清理 npm 缓存的艺术
npm 是 JavaScript 编程语言的包管理器,它是 Node.js 运行环境的默认包管理器。npm 提供了一个丰富的生态系统,包括数以百万计的可重用代码包。然而,随着时间的推移,npm 的缓存可能会变得庞大,影响性能或导致一些奇怪的…...
Flink中并行度和slot的关系——任务和任务槽
一、任务槽(task slots) Flink的每一个TaskManager是一个JVM进程,在其上可以运行多个线程(任务task),那么每个线程可以拥有多少进程资源呢?任务槽就是这样一个概念,对taskManager上每个任务运行…...
22【AUTOSAR自适应平台设计的概述01】杂项概念介绍
1.AUTOSAR自适应平台设计的概述 本小课题主要是让读者对AUTOSAR自适应平台设计的思路有个宏观的概念,不拘泥于具体的技术细节。 总结如下: 概述AUTOSAR自适应平台(AP)的设计。为AP用户和实施者提供总体设计和关键概念2.具体的章节由以下几个部分组成: 技术范围和方法: 介…...
基础运维学习计划-base版
目录 需要学习的内容? liunx基础 sql/mysql基础 tcp/ip协议基础 http基础 dns基础 网络基础:交换&路由概念&原理 常见网络协议 月学习计划 12.26 日 (bilibili自己找视频看看,资源很多) 12.27日 1…...
Golang的发展历程
Golang的发展历程可以分为以下几个阶段: 设计阶段:2007年,Google开始研究开发一种新的编程语言,主要出于对C和Java等编程语言的不足之处的反思。经过一年多的研究和讨论,Golang的设计方案得到确定,主要包括…...
数据结构之线性表之顺序表
定义: 由n(n>0)个数据特性相同的元素构成的有限序列称为线性表 简单来说n个相同数据类型的数据组wsw合在一起的这么一个集合就是一个线性表 线性表包括顺序表和链表 1. 顺序表(我们所有的代码实现都用函数来封装)…...
GESP202309 二级【小杨的 X 字矩阵】题解(AC)
》》》点我查看「视频」详解》》》 [GESP202309 二级] 小杨的 X 字矩阵 题目描述 小杨想要构造一个 的 X 字矩阵( 为奇数),这个矩阵的两条对角线都是半角加号 ,其余都是半角减号 - 。例如,一个 5 5 5 \times 5 5…...
流量主微信小程序工具类去水印
工具类微信小程序流量主带后台管理,可开通广告,带自有后台管理,不借助第三方接口 介绍 支持抖音,小红书,哔哩哔哩视频水印去除,功能实现不借助第三方平台。可实现微信小程序流量主广告变现功能,…...
Es搭建——单节点——Linux
Es搭建——单节点——Linux 一、安装 下载安装包: 官网下载地址:https://www.elastic.co/downloads/elasticsearch 上传包到linux 切换到安装目录下 解压:tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安装文件夹 mv elastics…...
linux安装idea
参考原网址:在Linux系统中安装idea教程_idea linux-CSDN博客 1.下载idea Download IntelliJ IDEA – The Leading Java and Kotlin IDE 选择Download,下载正确的文件名:ideaIU-2024.3.1.1.tar.gz 2.安装vim sudo apt install vim 3.解压…...
PLSQL 客户端连接 Oracle 数据库配置
1. 安装Oracle客户端 首先,安装Oracle客户端。可以从Oracle官方网站下载Oracle Instant Client, 安装完成后,请记住安装路径,因为将在后续步骤中需要用到它。 2. 配置环境变量 添加环境变量 ORACLE_HOME 安装Oracle客户端后,配…...
C#调用OpenXml,读取excel行数据,遇到空单元跳过现象处理
问题及现象 在OpenXML中文件不包含空白单元格的条目,这就是跳过空白单元格的原因。 所以如果当我们打开一个excel,读取一个表格数据,发现如果有空单元格,openXML会跳过导致读取的数据发生错位。 比如这个是原始的excel表格数据…...
【计算机视觉CV-图像分类】06 - VGGNet的鲜花分类实现:从数据预处理到模型优化的完整实战!
目录 引言 VGGNet概述 VGGNet的网络架构 基于预训练VGGNet的五类鲜花分类实现 4.1 数据准备与预处理 4.2 模型实例化与参数调整 4.3 模型训练与保存最优模型 4.4 模型导入与预测 4.5 训练过程的可视化 模型优化与防止过拟合 总结与展望 参考文献 引言 在计算机视觉…...
QT 控件定义为智能指针引发的bug
问题描述: std::unique_ptr<QStackedLayout> m_stacked_layout; 如上为定义; 调用: Line13ABClient::Line13ABClient(QWidget *parent) : BaseWidget(parent) { // 成员变量初始化 m_get_ready false; m_tittle_wnd…...
@register_model 装饰器
使用 register_model 装饰器来注册模型类有以下几个优势: 自动化注册: 通过装饰器自动将模型类注册到一个全局字典中,避免了手动注册的繁琐操作,使代码更加简洁和易于维护。 易于扩展: 可以方便地添加新模型ÿ…...
图像处理-Ch7-图像金字塔和其他变换
Ch7 小波变换&其他图像变换 文章目录 Ch7 小波变换&其他图像变换背景知识(bk)图像金字塔(Image Pyramid)子带编码(Sub-band Coding)Z - 变换(线性变换)完美重建滤波器组(PCFB, Perfect Construction Filter Banks)有限脉冲响应(FIR)滤波器双正交…...
解决在vue3+vite+element-plus 中echarts在el-dialog无法正常显示问题
核心:在dom加载完成后调用echarts实例 的resize()方法 这里是一个例子 这里封装一个echarts <template><div class"container" ref"container"></div> </template> <script lang"ts" setup> import {…...
SQL进阶技巧:如何计算摆动的序列?| LeetCode 376.-摆动序列
目录 0 摆动序列 1 数据准备 2 问题分析 3 小结 0 摆动序列 原题链接:376. 摆动序列 - 力扣(LeetCode) 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的…...
告别卡顿:探索 Java FGC 的根源与高效解决方案
Java Full Garbage Collection (FGC) 的产生原因及解决办法 引言 在Java应用程序的生命周期中,垃圾回收(Garbage Collection, GC)是确保内存有效管理的关键机制。然而,当发生Full Garbage Collection(FGC)…...
MySQL索引为什么是B+树
MySQL索引为什么是B树 索引是帮助MySQL高效获取数据的数据结构,在数据之外,数据库还维护着满足特定查找算法的数据结构B树,这些数据结果以某种特定的方式引用数据,这样就可以在这些数据结构上实现高级查找算法,提升数据…...
准备考试:解决大学入学考试问题
引言 在编程竞赛和算法挑战中,我们经常会遇到各种类型的组合问题。这些问题不仅考验我们的逻辑思维能力,还要求我们熟练掌握数据结构和算法。在这篇文章中,我们将探讨一个有趣的问题——“准备考试”,这个问题来自于一个虚构的情…...
vue3中如何自定义插件
英译汉插件 i18n.ts export default {install: (app: any, options: any) > {// 注入一个全局可用的$translate()方法app.config.globalProperties.$translate (key: string) > {// 获取options对象的深层属性// 使用key作为索引return key.split(".").redu…...
Linux应用软件编程-多任务处理(进程)
多任务:让系统具备同时处理多个事件的能力。让系统具备并发性能。方法:进程和线程。这里先讲进程。 进程(process):正在执行的程序,执行过程中需要消耗内存和CPU。 进程的创建:操作系统在进程创…...
PyCharm专项训练5 最短路径算法
一、实验目的 本文的实验目的是通过编程实践,掌握并应用Dijkstra(迪杰斯特拉)算法和Floyd(弗洛伊德)算法来解决图论中的最短路径问题。 二、实验内容 数据准备: 使用邻接表的形式定义两个图graph_dijkstra…...
“AI+Security”系列第4期(一)之“洞” 见未来:AI 驱动的漏洞挖掘新范式
在数字化浪潮下,安全漏洞问题日益严峻,成为各行业发展的重大挑战。近日,“AISecurity” 系列第 4 期线下活动于北京成功举办,聚焦 “洞” 见未来:AI 驱动的漏洞挖掘新范式,汇聚了安全领域的众多专家。 本次…...
安卓蓝牙扫描流程
目录 系统广播 流程图 源码跟踪 系统广播 扫描开启广播:BluetoothAdapter.ACTION_DISCOVERY_STARTED "android.bluetooth.adapter.action.DISCOVERY_STARTED";扫描关闭广播:BluetoothAdapter.ACTION_DISCOVERY_FINISHED "android.b…...
【视觉惯性SLAM:对极几何】
对极几何(Epipolar Geometry)介绍 对极几何是立体视觉中的核心内容之一,它描述了两个相机在观察同一个三维场景时,成像平面之间的几何关系。对极几何能够约束图像中对应点的位置关系,是双目立体匹配、三维重建、以及位…...
Stream `Collectors.toList()` 和 `Stream.toList()` 的区别(Java)
Stream Collectors.toList() 和 Stream.toList() 的区别 问题背景 在以下代码中: Test void test() {JSONArray nodes new JSONArray();String[] names {"df1", "df2", "df3"};for (String name : names) {JSONObject obj new …...
【Python知识】Python面向对象编程知识
Python面向对象编程知识 概述1. 类(Class)2. 对象(Object)3. 封装(Encapsulation)4. 继承(Inheritance)5. 多态(Polymorphism)6. 抽象(Abstractio…...
安卓帧率获取
背景 性能优化,经常用到一些指标,诸如帧率、功耗等。对于普通app来讲, 之前一直使用gfxinfo指令获取丢帧率。但是这个指令无法获取游戏的帧率,查阅资料,发现SurfaceFlinger可以获取游戏帧率。 帧率获取原理 获取当前f…...
shell脚本(全)
shell脚本概述 第一个shell脚本 shell注释 shell变量 shell位置参数 shell字符串 shell内置命令 shell命令替换 输出 流程控制IF export命令 退出脚本 运行Shell脚本 实例导航 shell脚本概述 在说什么是shell脚本之前,先说说什么是shell。 从程序员的…...
Flask-----SQLAlchemy教程
存session session[username] username # 存储数据到 session 取session username session.get(username) render_template return render_template(index.html, usernameAlice),渲染一个包含 username 变量的模板。 redirect return redirect(url_for(profil…...
【C++11】可变模板参数
目录 可变模板的定义方式 参数包的展开方式 递归的方式展开参数包 STL中的emplace相关接口函数 STL容器中emplace相关插入接口函数 编辑 模拟实现:emplace接口 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比 C9…...
.NET开发人员学习书籍推荐
作为一名.NET开发人员,掌握相关技术是提升开发能力和拓展职业发展的关键。无论你是刚入门的新人,还是希望精进技术的资深开发者,选择合适的学习资源至关重要。下面是一些经典且实用的学习书籍推荐,帮助你在C#、SQL、前端开发等方面…...
jupyter切换内核方法配置问题总结
下面这个博客总结了3种不同的方法,很有调理,推荐尝试 【最全指南】如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境? !!! 注意使用上面介绍的ipykernel方法2, 要在每一个希望被jupyter识别到的环境内【分别】安装ipykernel以及添加配置 …...
SVM理论推导
本文介绍支持向量机(SVM)的理论推导。 一、SVM 的基本思想 SVM 的目标是找到一个最优超平面,将样本分为不同的类别,并最大化类别间的间隔。 1. 线性可分情况下: 在特征空间中找到一个超平面,使得&#…...
如何永久解决Apache Struts文件上传漏洞
Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来,就存在多个版本的漏洞,其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制,从而上传恶意文件。虽然每次官方都发布补丁进行修…...
【Java数据结构与算法】第10-14章
第10章 树结构的基础部分 10.1 二叉树 10.1.1 为什么需要树这种数据结构 10.1.2 树示意图 10.1.3 二叉树的概念 10.1.4 二叉树遍历的说明 10.1.5 二叉树遍历应用实例(前序,中序,后序) 10.1.6 二叉树-查找指定节点 思路图解 10.1.7 二叉树-删除节点 package com.atguigu.tree;…...
MacOS M3源代码编译Qt6.8.1
编译时间过长,如果不想自己编译,可以通过如果网盘进行下载: 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤: 安装Xcode和…...
3.银河麒麟V10 离线安装Nginx
1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…...
实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响
在 Qt 开发中,QTreeWidget 提供了树形结构的显示和交互功能。为了实现某个子节点勾选或取消勾选时,只影响当前节点及其子节点的状态,同时递归更新父节点的状态以正确显示 Qt::PartiallyChecked 或 Qt::Checked,我们可以借助 Qt 的…...
ubuntu24.04使用opencv4
ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...
R语言数据分析案例46-不同区域教育情况回归分析和探索
一、研究背景 教育是社会发展的基石,对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天,不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上,还表现在教育成果、教育投入与…...
flink sink doris
接上文:一文说清flink从编码到部署上线 网上关于flink sink drois的例子较多,大部分不太全面,故本文详细说明,且提供完整代码。 flink doris版本对照表 1.添加依赖 <!--doris cdc--><!-- 参考:"https…...
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
在当今大数据与人工智能蓬勃发展的时代,Apache Spark MLlib 作为强大的机器学习库,与广泛应用的 Java 语言相结合,为数据科学家和开发者们提供了丰富的可能性。那么,Apache Spark MLlib 与 Java 结合的最佳实践究竟是什么呢&#…...
Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法
官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图,替换第一行的新编码,把41230441044替换为41230441000 替换代码如下ÿ…...