2013-04-20 09:43:08| 分类: 默认分类|字号 订阅
《OpenCV入门指南》这个系列已经讲解了十一篇,相信大家对OpenCV已经有一个初步的了解了。有网友反映怎么自己写的OpenCV程序拷贝到其它人的电脑上就无法使用?对于电脑高手来说,这个问题简直不值一提。但对新手来说,有篇详细的文章来教他们解决这个问题肯定也能大大节省他们的时间。因此本篇就来解决这个问题——让没安装OpenCV的电脑也能运行我们所写的OpenCV程序。
以上一篇《【OpenCV入门指南】第十一篇鼠标绘图》的程序为例,在没安装OpenCV的电脑(Win7系统)上运行Release生成的opencv_test1.exe会报错。错误内容如下——无法启动此程序,因为计算机中丢失opencv_core231d.dll。尝试重新安装该程序以解决此问题。
由于报错的原因是因为一些DLL没有被加载,因此随程序附加上DLL看看可不可以解决这个问题。
使用vs2010中项目-属性-配置属性-链接器-输入 中的附加依赖项查看这个程序依赖哪些DLL。
可以看出程序依赖于opencv_core231d.dll和opencv_highgui231d.dll,到OpenCV的安装目录中找出这二个DLL将其与我们的opencv_test1.exe放在同一目录,再运行。结果还是报错。错误内容如下——应用程序无法正常启动(0xc0150002)。请单击“确定”关闭程序。
到网上查了“应用程序无法正常启动 0xc0150002”的解决方法,有人说要下一个VC支持程序
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647
不过安装后还是报错!!!!
再搜索下解决方法,原来OpenCV的DLL是分Debug和Release两种的,像opencv_core231d.dll这个文件名最后有个d说明这是Debug下生成的,不加d即opencv_core231.dll才是Release下生成的。
而且很明显Release生成的程序应该去加载Release生成的DLL,因此这个opencv_test1.exe应该去加载opencv_core231.dll和opencv_highgui231.dll。在项目配置中改下将《【OpenCV入门指南】第一篇安装OpenCV》中使用的
opencv_calib3d231d.lib opencv_contrib231d.lib opencv_core231d.libopencv_features2d231d.lib opencv_flann231d.lib opencv_gpu231d.lib opencv_highgui231d.libopencv_imgproc231d.lib opencv_legacy231d.lib opencv_ml231d.lib opencv_objdetect231d.lib opencv_ts231d.lib opencv_video231d.lib
换成
opencv_calib3d231.lib opencv_contrib231.lib opencv_core231.lib opencv_features2d231.lib opencv_flann231.lib opencv_gpu231.lib opencv_highgui231.lib opencv_imgproc231.lib opencv_legacy231.lib opencv_ml231.lib opencv_objdetect231.lib opencv_ts231.lib opencv_video231.lib
设置配置的方法见这里(可以参考《【OpenCV入门指南】第一篇 安装OpenCV》中的图示):
在VS2008中点击“项目”,再点击“属性”,依次展开“配置属性”--> “链接器”--> “输入”在“附加依赖项中”添加即可(Release)。
然后再将opencv_core231.dll和opencv_highgui231.dll放到opencv_test1.exe目录下。双击,已经可以成功运行了。
本文这种方法比较原始,规范一点的做法应该是作个安装包来发布程序的。安装包的制作比较复杂,肯定不是一篇两篇博客可以讲透彻的,大家可以搜索下“VS2008 安装与部署”。使用其它打包工具也是个不错的选择。
使用静态编译的方法也可以,不过这样生成的exe程序会比较庞大。可以参考:http://www.opencvchina.com/thread-1368-1-1.html
原文链接 http://blog.csdn.net/morewindows/article/details/8426295
另外,如果出现了_cvtColor LNK2001: 无法解析的外部符号是库文件没添加造成的。
项目--》属性--》配置属性--》链接器-》输入--》附加依赖项
在其中加入所需库文件,同时在“链接器--》常规--》附加库目录”中填入相应库名。这样应该就可以了