如何让OpenCV工程在没有VS和OpenCV的电脑上运行

如何让OpenCV工程在没有VS和OpenCV的电脑上运行,第1张

一、如何让OpenCV工程在没有VS和OpenCV的电脑上运行?

对于这个问题,有两个方法

1. 使用动态库,讲工程所需的.lib,.dll,.h等和工程.exe一起拷到另一台电脑上运行。

2.使用静态库,讲工程需要的.lib直接编译进.exe中,这时的.exe会比方法1中的大很多,但是此时只需要拷贝一个.exe就可以在另一台电脑上运行了。

二、如何将.lib编译进.exe中?

注意这里的.lib是静态链接库,与动态链接库的引导库.lib不同(动态链接库.dll需要有一个.lib作为引导库)。

将.lib编译进.exe中的第一步是编译OpenCV的静态库.lib。具体的编译方法可以参考:OpenCV - 编译静态OpenCV库(静态库)

生成OpenCV的静态库后,就可以进行第二步了。

1,将相应的静态库配置到工程中。

2,配置属性-〉MFC的使用:设置为 在静态库中使用 MFC

3,配置属性-〉C/C++ -〉代码生成-〉运行库 :设置为 多线程 (/MT)。

在VC(2005以上)中有四种运行库:Multi-threaded(/MT)、Multi-threaded-Debug(/MTD)、Multi- threaded-dll(/MD)、Multi-threaded-debug-dll(/MDD):前两个是静态类型库,提供的函数会被链接到程序中;后两个是动态库,会以动态链接库的形式提供函数给程序调用。

设置完之后,生成的.exe就可以直接使用了。

该部分可参考:OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住

三、补充

1, 其实在安装和编译OpenCV后,其本身已经包含了静态库,在 \build\x86\vc10\staticlib 和\build\x64\vc10\staticlib 路径下,所以本文的使用CMake 编译静态库可以省略掉。

2。按照 二 中的步骤生成.exe运行,发现读取视频不成功。原因是OpenCV的视频解码等处理是基于ffmpeg,而OpenCV仅仅提供了ffmpeg的动态链接库 opencv_ffmpeg***.dll,悉知并没有其静态链接库,即使是使用CMake也不能生成(勾选WITH_FFMPEG也不行)。

所以如果想让视频读取成氏衫功,该.exe需要一个.dll支持,即opencv_ffmpeg***.dll。

3。编译ffmpeg静态库的方法可以参考:MinGW下编译ffmpeg静态库给Visual C++使用

按照该方法可以编译出一堆.a文件,即ffmpeg的静态库。这些.a文件的调用具有一定的顺序。

但是我按照文中方法设置后依然无法打开视频。

同时我注意到,OpenCV中也有类似的文件,存放于 \opencv\3rdparty\include\ffmpeg_ 及opencv\3rdparty\lib 中,料想就是ffmpeg的静态库,但是设置后依然无法打开视频。

所以,万不得已,最后的方法还是加入一个.dll支持,即opencv_ffmpeg***.dll。

4。针对文章睁核消:OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 中提到的videoInput.lib,我始终都没有找到,料想是版本的不同吧。

可能原因:

如果OpenCV以前用的时候没有问题的,后来系统备核升级之后就有问题了,很可能是系统升级造成的这个问题。

解决方法:

将缺失的动态链接敏闷库添加到路径C:\Windows\System32或者C:\Windows\SysWOW64

这样就不用每次将动仿拿掘态链接库放到工程所在的文件夹下了。

1.OpenCV确实是在运行时自动加载这些优化库, 不需要运行cvUseOptimized()函数, 前提是库的相关路径注册了环境变量(之前我没注册, 所以没有加载成功).

可运行如下程序进行检验:

const char* opencv_libraries = 0

const char* addon_modules = 0

cvGetModuleInfo( 0, &opencv_libraries,&addon_modules )

printf( "OpenCV: %s\\r\\nAdd-on Modules: %s\\r\\n."戚裂世, opencv_libraries, addon_modules)

如果自动加载成功会输出:

OpenCV: cxcore: 1.0.0, cv: 1.0.0

Add-on Modules: ippcv-5.1.dll, ippi-5.1.dll, ipps-5.1.dll, ippvm-5.1.dll, ippcc-5.1.dll, mkl_p4.dll

此时再运行cvUseOptimized(1), 通过查看返回值, 可以知道有多少个函数被优化。

2.不同函数优化的程度不一。

用几个函数测试了一下加载优化库后的源顷优化程度:

系统: P4(2.6G) 512MB XP VC6

测试图像: 768×576 8UC1

循环100次

测试函数 cvSmooth(CV_GAUSSIAN,31*31) 2493ms(with IPP) 5498ms(without IPP)

测试函数 cvSobel(7*7)1674ms(with IPP) 1672ms(without IPP)

测试函数 cvCanny(3*3)2901ms(with IPP) 3385ms(without IPP)

可以看出不同函数优化的程度不一样, cvSmooth优化程度很高, 性能提升50%多, cvSobel基本没有变化, 网上有的老外还说用了IPP之后速度下降了 .

所以究竟用不用IPP(199美元呢), 还得各位测试一下自己的程序高肢, 好在现在还有Evaluation版的IPP可以用。要是OpenCV下个版本能提供一份儿各个函数优化表就好了.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12367445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存