问题描述:
c#的winform需要调用c++ 生成的opencv X86动态库dll,做图像预处理,但本机开发环境下可以正常用opencv功能,c#打包安装在其他电脑上会出现:找不到opencv相关dll的错误。
在网上看到需要把opencv 编译成静态库,链接如下。
opencv的静态编译(暨本机opencv在c++环境生成dll,在其他计算机上无法调用问题)_opencv库生成dll 在其他电脑里无法使用-CSDN博客
Cmake编译opencv X86静态库不成功:
opencv之后的版本只有x64版本,x86(win32)需要Cmake编译,折腾一天半不行。我的Opencv X86的动态库都是在网上下载的,奈何静态库网上找了半天没有。
终于不负有心人,看到了Vcpkg 可以把opencv 编译成静态库, 接下来说教程。
开发环境:
开发平台:win11
软件 :vs2019
语言 : c++、c#
开发库 :Opencv X86
一、下载拉取 Vcpkg 代码
推荐的下载位置:
1.1 cmd终端拉取代码
有可能比较大拉取不到,我没有拉取成功,所以我直接下载zip。
git clone https://github.com/microsoft/vcpkg
1.2 网页直接下载代码
Vcpkg网址,进去选中50Tags。
点击zip下载到电脑上解压。
二、安装Vcpkg
cmd进入下载或解压好的路径,终端输入
bootstrap-vcpkg.bat
这时候需要一些上网trick,要不会超时。
三、安装Opencv x86 静态编译库
在安装opencv x86的时候需要配置以下Vs2019的环境,要不可能会报错“could not find any instance of Visual Studio”。
报“could not find any instance of Visual Studio”错参考以下链接:
在此路径下继续输入以下代码进行opencv x86静态库编译安装:
vcpkg.exe install opencv:x86-windows-static
当然要是安装x64的库:
vcpkg.exe install opencv:x86-windows-static
或者查看opencv的库
vcpkg.exe search opencv
里面只有三个版本的 opencv 2、3、4。
例如安装opencv4,输入以下代码:
vcpkg.exe install opencv4:x86-windows-static
在编译的时候可能耗费的时间挺久的。
编译完成界面,现在opencv已经安装好了。
在vcpkg目录下找到installed目录,我的是 C:\src\vcpkg\installed 目录下有一个 x86-windows-static文件夹,这就是opencv 静态库目录。
C:\src\vcpkg\installed\x86-windows-static 文件夹包含oepncv 的 include和lib文件。
四、vs2019调用opencv x 86 静态库
vs2019新建c++项目,属性页面配置选择Release,平台选择win32,配置属性 -> VC++目录 -> 包含目录和库目录。
包含目录,C:\src\vcpkg\installed\x86-windows-static\include 和 C:\src\vcpkg\installed\x86-windows-static\include\opencv2
库目录C:\src\vcpkg\installed\x86-windows-static\lib:
属性页 链接接器->输入->附加依赖项 填C:\src\vcpkg\installed\x86-windows-static\lib 文件夹里所有后缀.lib文件名称:
C:\src\vcpkg\installed\x86-windows-static\lib文件夹后缀.lib文件
我这里是:
flatbuffers.lib
jpeg.lib
libpng16.lib
libprotobuf.lib
libprotobuf-lite.lib
libprotoc.lib
libsharpyuv.lib
libwebp.lib
libwebpdecoder.lib
libwebpdemux.lib
libwebpmux.lib
lzma.lib
opencv_calib3d4.lib
opencv_core4.lib
opencv_dnn4.lib
opencv_features2d4.lib
opencv_flann4.lib
opencv_highgui4.lib
opencv_imgcodecs4.lib
opencv_imgproc4.lib
opencv_ml4.lib
opencv_objdetect4.lib
opencv_photo4.lib
opencv_stitching4.lib
opencv_video4.lib
opencv_videoio4.lib
quirc.lib
tiff.lib
turbojpeg.lib
zlib.lib
填写进去
最后设置一下:
Opencv显示一张图片:
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat imageMat = cv::imread("1.png");
cv::imshow("figure1", imageMat);
cv::waitKey(0);
return 0;
}
图片成功显示,配置成功。
五、总结和可下载编译好的opencv x86静态库
亲测opencv x86静态库生成的dll,被c#调用然后安装在其他没有环境的电脑上可以使用。
我知道肯定有人碰到各种原因没有编译成功,下面是编译好的opencv X86静态库,供大家免费下载~
https://download.csdn.net/download/weixin_43709347/89155134?spm=1001.2014.3001.5503
之前下载别人opencv x86动态库,生成dll别的电脑不可以使用,静态库在网上苦寻无果,还好没有放弃。
折腾了一天半时间,之前用cmake编译opencv x86从没成功过,真的好绝望,还好久违的笑容出现了!
可能我孤陋寡闻,大家有其他opencv生成dll供其他无环境电脑使用可以评论或者私信我,谢谢了~