Opencv4.8及opencvsharp4编译及修改示例

下载cmake,并安装

在这里插入图片描述

下载安装VisualStudio 2022

VisualStudio往下的版本不支持.Net 6,Visual Studio 2019不支持opencvsharp4的源码,会有很多格式报错。

编译opencv4.8也可适当参考连接:
这个是编译opencv3.4的:https://blog.csdn.net/qq_40147007/article/details/126707732

下载opencv源代码,解压

在这里插入图片描述

下载opencv第三方库

opencv对应版本的第三方库opencv_contrib,并解压。
在这里插入图片描述

创建工程opencv的Visual Studio工程

创建opencv的Visual Studio 2022的工程,设置工程创建的路径。
在这里插入图片描述

设置opencv源代码路径,点击configuration,使得上方列表无红色的警告行,如上图所示。
取消勾选build_shared_libs,用于生成静态库。
在这里插入图片描述

启用第三方库,勾选opencv_enable_nonfree,设置第三方库源代码路径。
多进行几次configuration,直到上方列表无红色行,全为白色行,再点击generate进行工程创建。
若出现CMP0148的错误,修改opencv源码路径下的CMakeList.txt文件,不出现则忽略。
在这里插入图片描述

若出现找不到python相关包的警告,忽略即可,编译C++库不会用到,不出现则忽略。
若出现下载报错,可根据报错的内容,手动进行下载(使用迅雷进行下载,下载连接根据报错提示),将手动下载的文件放在源码的缓存(.cache,如下图所示)路径下,替换掉下载不成功的文件。
在这里插入图片描述
在这里插入图片描述

若出现解压文件失败,安装解压软件,更改解压指令。
在这里插入图片描述

execute_process(COMMAND “$ {CMAKE_COMMAND}” -E tar xzf “$ {CACHE_CANDIDATE}”
指令值:cmake -E tar xzf path
execute_process(COMMAND bandizip x “${CACHE_CANDIDATE}”
指令值:bandizip x path
#号为注释掉的原有指令,我使用的bandizip压缩软件,测试压缩指令可在Windows powershell窗口中进行测试,通过Windows或Visual Studio2022均可打开。
在这里插入图片描述
在这里插入图片描述

工程创建后如下图所示。
在这里插入图片描述

打开opencv.sln,选择install项目,右键进行生成。编译后工程会占用40G左右的磁盘空间,编译Release配置和Debug配置后,会占用66G的磁盘空间,编译前请预留足够的磁盘空间。
在这里插入图片描述
在这里插入图片描述

静态库

什么是静态库?

一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件,如果你工程里只有一个lib.h和lib.cpp,那么编译后产生的lib文件实际上就是这一个lib.obj文件的一个集合,但是如果你工程里还有其他的很多个lib.cpp文件,那么就会在编译之后生成许多lib.obj文件,然后最终只链接生成一个静态lib文件,这就是静态库。也正是因为静态库中包含了所有的静态库的.obj文件,所以静态库包含了函数的完整实现。

为什么叫作静态库?

之所以称为静态库,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中,如果静态库需要进行修改,那么需要将修改的静态库文件和目标文件重新链接打包到可执行文件中,因此对应的链接方式称为静态链接,对应的库就是静态库。

静态库特点总结

引用静态库时,在编译阶段会将静态lib文件和其他obj文件打包生成.exe可执行文件,因为静态库是任意个obj文件的集合,所以静态库包含了函数代码的完整实现,所以这里的.exe文件可以直接执行。以后再运行这个exe可执行文件时,也不再需要.lib文件,可以直接运行
浪费空间和资源,因为静态lib文件实际上是包含了所有的导出声明和实现,你如果把这个lib文件链接到自己的程序之后,这个lib文件中的所有代码都会嵌入进来,哪怕你只用到了其中一部分,剩下没用到的也进了你的代码。这就不难想象会造成的后果了,虽然方便,但是如果大部分你都用不到,自然会导致你的库体积没有意义地变大。
当静态链接库发生变化时,目的程序必须要重新编译,否则执行时静态链接库的内容没有更新,重新编译后再发布给用户(对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新)。
————————————————
原文链接:https://blog.csdn.net/weixin_44049823/article/details/130963119

下载opencvsharp 4源码并解压

在这里插入图片描述

运行download_opencv_windows.ps1,下载opencv库文件。
在这里插入图片描述

若下载失败,可通过文本文档打开download_opencv_windows.ps1脚本,使用迅雷下载,下载连接中的$标志的变量需要替换为对应的变量值,才能用于下载。
下载后将压缩包放置在opencv_files目录下,重新运行download_opencv_windows.ps1脚本,对压缩包进行解压并删除压缩包。
在这里插入图片描述
在这里插入图片描述

运行download_tesseract_windows.ps1,下载tesseract文件,若下载失败,和opencv文件处理类似,也可使用迅雷下载。
若需要使用自己编译的opencv库,右键属性修改
VC++目录-包含目录F:\MyCV\mybuild\install\include,F:\MyCV\mybuild\install\include\opencv2
VC++目录-库目录(编译时需编译为静态库staticlib):
F:\MyCV\mybuild\install\x64\vc17\staticlib\Debug, F:\MyCV\mybuild\install\x64\vc17\staticlib
连接器-输入:
aded.lib
IlmImfd.lib
ippiwd.lib
ittnotifyd.lib
libjpeg-turbod.lib
libopenjp2d.lib
libpngd.lib
libprotobufd.lib
libtiffd.lib
libwebpd.lib
opencv_aruco480d.lib
opencv_bgsegm480d.lib
opencv_bioinspired480d.lib
opencv_calib3d480d.lib
opencv_ccalib480d.lib
opencv_core480d.lib
opencv_datasets480d.lib
opencv_dnn480d.lib
opencv_dnn_objdetect480d.lib
opencv_dnn_superres480d.lib
opencv_dpm480d.lib
opencv_face480d.lib
opencv_features2d480d.lib
opencv_flann480d.lib
opencv_fuzzy480d.lib
opencv_gapi480d.lib
opencv_hfs480d.lib
opencv_highgui480d.lib
opencv_img_hash480d.lib
opencv_imgcodecs480d.lib
opencv_imgproc480d.lib
opencv_intensity_transform480d.lib
opencv_line_descriptor480d.lib
opencv_mcc480d.lib
opencv_ml480d.lib
opencv_objdetect480d.lib
opencv_optflow480d.lib
opencv_phase_unwrapping480d.lib
opencv_photo480d.lib
opencv_plot480d.lib
opencv_quality480d.lib
opencv_rapid480d.lib
opencv_reg480d.lib
opencv_rgbd480d.lib
opencv_saliency480d.lib
opencv_shape480d.lib
opencv_stereo480d.lib
opencv_stitching480d.lib
opencv_structured_light480d.lib
opencv_superres480d.lib
opencv_surface_matching480d.lib
opencv_text480d.lib
opencv_tracking480d.lib
opencv_video480d.lib
opencv_videoio480d.lib
opencv_videostab480d.lib
opencv_viz480d.lib
opencv_wechat_qrcode480d.lib
opencv_xfeatures2d480d.lib
opencv_ximgproc480d.lib
opencv_xobjdetect480d.lib
opencv_xphoto480d.lib
quircd.lib
zlibd.lib
ippicvmt.lib
Debug配置时采用F:\MyCV\mybuild\install\x64\vc17\staticlib\Debug,连接库均以d.lib的形式结尾;Release配置时采用F:\MyCV\mybuild\install\x64\vc17\staticlib\Release,连接库均以.lib的形式结尾。
ippicvmt.lib为公用的库,不区分Debug和Release配置。
在这里插入图片描述

ippicvmt.lib来源于下载的缓存文件,是intel提供的底层库,可查看icv目录下的readme.htm文档,路径参考下图。
在这里插入图片描述
在这里插入图片描述

编译完成后,OpenCvSharpExtern.dll的大小在40M到116M之间,其中包含了opencv算法的实现,而opencvsharp.dll只有不到1M,里面仅封装了数据结构和对OpenCvSharpExtern.dll的调用。

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

在这里插入图片描述

测试C#可执行程序

测试使用的源代码说明:https://blog.csdn.net/sunsoldeir1/article/details/128392181
测试使用的源代码:https://download.csdn.net/download/sunsoldeir1/87324867
将封装好的opencvsharp库(生成的全部的库)拷贝到Debug目录下,添加引用,当库更换后,请删除引用后再重新添加。测试时可正常打开摄像头并进行简单的画框操作。
在这里插入图片描述
在这里插入图片描述

下载的源代码中采用的packages.config指定了对应的opencvsharp库,测试需要使用自己编译的库,可将packages文件夹和packages.config配置文件删除,项目引用目录下删除相关引用并重新添加。添加引用如上图所示,运行效果如下图。
在这里插入图片描述

由于opencv的库函数puttext不支持中文,绘制中文时会出现乱码???(如上图所示),因此需要重新增加一条库函数,用于取代原有puttext的函数功能。

Opencv算法编写测试

以puttext函数为例,原始函数不支持中文的显示。
编写opencv算法实现并进行测试,这里采用网上的代码,简单进行调试验证后使用。
C++ OpenCV【解决putText不能显示中文】
连接为:https://blog.csdn.net/Gary_ghw/article/details/127264205
调试时,创建C++控制台应用程序项目,将代码拷贝进工程。右键项目属性,修改opencv的依赖项:包含目录、库目录、附加依赖项。另外本文测试采用的静态库,因此还需要修改运行库设置,采用动态库时不需要修改。
如下图所示。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文编译opencv时采用的分模块打包的静态库,与一般情况下动态库或打包为world库时附加依赖项可能不同,附加依赖项如下:
aded.lib
IlmImfd.lib
ippiwd.lib
ittnotifyd.lib
libjpeg-turbod.lib
libopenjp2d.lib
libpngd.lib
libprotobufd.lib
libtiffd.lib
libwebpd.lib
opencv_aruco480d.lib
opencv_bgsegm480d.lib
opencv_bioinspired480d.lib
opencv_calib3d480d.lib
opencv_ccalib480d.lib
opencv_core480d.lib
opencv_datasets480d.lib
opencv_dnn480d.lib
opencv_dnn_objdetect480d.lib
opencv_dnn_superres480d.lib
opencv_dpm480d.lib
opencv_face480d.lib
opencv_features2d480d.lib
opencv_flann480d.lib
opencv_fuzzy480d.lib
opencv_gapi480d.lib
opencv_hfs480d.lib
opencv_highgui480d.lib
opencv_img_hash480d.lib
opencv_imgcodecs480d.lib
opencv_imgproc480d.lib
opencv_intensity_transform480d.lib
opencv_line_descriptor480d.lib
opencv_mcc480d.lib
opencv_ml480d.lib
opencv_objdetect480d.lib
opencv_optflow480d.lib
opencv_phase_unwrapping480d.lib
opencv_photo480d.lib
opencv_plot480d.lib
opencv_quality480d.lib
opencv_rapid480d.lib
opencv_reg480d.lib
opencv_rgbd480d.lib
opencv_saliency480d.lib
opencv_shape480d.lib
opencv_stereo480d.lib
opencv_stitching480d.lib
opencv_structured_light480d.lib
opencv_superres480d.lib
opencv_surface_matching480d.lib
opencv_text480d.lib
opencv_tracking480d.lib
opencv_video480d.lib
opencv_videoio480d.lib
opencv_videostab480d.lib
opencv_viz480d.lib
opencv_wechat_qrcode480d.lib
opencv_xfeatures2d480d.lib
opencv_ximgproc480d.lib
opencv_xobjdetect480d.lib
opencv_xphoto480d.lib
quircd.lib
zlibd.lib
ippicvmt.lib
运行效果如下图所示,符合预期,能正常显示中文了,而原有算法依然不能正常显示中文。
在这里插入图片描述

算法的OpenCvSharp封装

将算法实现的.h,.cpp文件拷贝到OpenCVSharp.Extern项目下,并添加到项目中。
在这里插入图片描述

如上图所示,使用opencv编写算法实现putTextHusky,在原有调用函数putText的头文件中新增一条导出函数并对新增算法putTextHusky进行调用,其作为dll的输出函数,供opencvsharp进行导入,如下图所示,导入的位置搜索原有函数方法imgproc_putText即可找到,如下图的绿框所示。
在这里插入图片描述

新增静态PutTextCH方法,调用导入的新算法imgproc_putTextCH函数进行封装,封装位置通过查找imgproc_putText的引用即可找到。
在这里插入图片描述

重新生成opencvsharp.Extern和opencvsharp的Dll,新增一条函数后,生成的dll文件均略有增大,将dll拷贝到测试工程中,进行PutTextCH方法的中文测试。

封装后C#可执行程序测试

可以发现,封装的新算法PutTextCH能够正常的在图片中显示中文了,而原有算法PutText显示的异常。

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

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
编译OpenCV 4.8需要在Windows操作系统上进行一系列步骤。首先,需要下载并安装CMake作为OpenCV编译工具。接下来,需要下载OpenCV的源代码,并解压到一个目录中。然后,打开CMake并设置源代码路径和编译路径。在CMake中,需要配置一些选项,比如选择生成的IDE(比如Visual Studio),配置OpenCV的一些参数(如是否安装Python支持等)。然后点击“配置”按钮,CMake会生成一个配置文件。根据提示进行配置,直到没有报错为止。接下来,点击“生成”按钮,CMake会生成项目文件。然后打开生成的项目文件,比如Visual Studio项目文件,进行编译。在Visual Studio中,选择Release模式,并点击“生成解决方案”,等待编译完成。最后,在编译完成后,可以在安装目录下找到生成的OpenCV库文件,并将其添加到系统环境变量中,以便在其他项目中使用。 在编译的过程中,可能会遇到各种问题,比如缺少依赖库、配置错误等。需要根据具体的错误信息来解决问题,可能需要查阅OpenCV的官方文档或搜索解决方案。另外,编译OpenCV可能会耗费较长的时间,特别是在较低配置的电脑上。因此,在编译之前需要有一定的耐心和时间准备。总的来说,编译OpenCV 4.8需要一定的技术水平和耐心,但是通过按照以上步骤进行操作,可以成功完成编译并获得OpenCV库文件,为后续的图像处理项目打下基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值