opencv静态编译

一、序言

当一个opencv工程实现之后,我们会面临一个问题,怎么把opencv程序的exe在其他电脑上运行,这个问题已经有很多人遇到过,当然也有很多人给出了博客,介绍了具体的解决方法,具体自己操作时,还是遇到了这样或者那样的小毛病,不过凭借自己根据错误提示解决问题的能力,最后还是把静态编译给编译成功了。

本文介绍两种opencv程序移植到其他电脑运行的方法,一种是动态编译,需要拷贝程序运行需要的dll,也就是-个exe跟着多个dll的模式,这种简单粗暴,但是显得拖拖拉拉,一个程序还得跟着那么多其他文件,所以我们很不推荐。另外一种就是本文主要介绍的静态编译,和之前运行不一样,我们在这使用的不是opencv的lib库,而是staticlib,编译成功之后,程序只需要拷贝一个exe,就可以在其他电脑上运行。

另外介绍一下本文测试程序工作的程序配置

操作系统 Win7
IDE VS2010
opencv版本 opencv2.4.5

二、动态编译

为了做一个全面的总结,在这简单的介绍opencv动态编译的方法。

opencv动态编译需要两部分dll:

(1)opencv库的dll,检查你所引用的h文件,把对应的dll,拷贝过来就行,注意debug和release的不同,当然一般程序发布的话都会用release版本的,因为release版本比debug版本要快10倍有余。

(2)考虑到目标终端有可能没有装vs,所以需要拷贝msvcp110.dll和msvcr110.dll(release下),dll在C:\Windows\System32下。

三、静态编译

静态编译主要的不同就是利用的是H:\Opencv2.4.5\opencv\build\x86\vc11\staticlib文件下的lib,而非H:\Opencv2.4.5\opencv\build\x86\vc11\lib文件夹。具体配置如下:

1.新建空项目,项目名称Static_Opencv

2.新建cpp,写入一个简单opencv测试程序:

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;

void main()
{
	cv::Mat image = cv::imread("img1.png");
	cv::flip(image,image,1);
	cv::imwrite("flip.jpg",image);
}

3.新建一个属性管理器

视图-》属性管理器-》Debug-》右键-》添加新项目属性表

属性表名称改为PropertySheet_Static_Opencv_debug。

4.编辑属性表

右键属性表-》属性-》VC++目录-》包含目录,然后添加opencv的h文件目录:

库目录里面添加staticlib文件夹目录

然后C/C++-》代码生成-》运行库-》多线程调试(/MTd),

介绍一下这四个选项,多线程(/MT)为静态链接release模式,多线程调试(/MTd)为静态链接debug模式,多线程dll(/MD)为动态链接release模式,多线程调试DLL(/MDd)为动态链接debug模式。

5.最后在程序中添加#pragmatic,使用程序调用lib

完整的程序如下:

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

#pragma comment( lib, "IlmImfd.lib")
#pragma comment( lib, "libjasperd.lib")
#pragma comment( lib, "libjpegd.lib")
#pragma comment( lib, "libpngd.lib")
#pragma comment( lib, "libtiffd.lib")
#pragma comment( lib, "zlibd.lib")

#pragma comment( lib, "opencv_core245d.lib")
#pragma comment( lib, "opencv_highgui245d.lib")

#pragma comment( lib, "vfw32.lib" )
#pragma comment( lib, "comctl32.lib" ) 

using namespace cv;

void main()
{
	cv::Mat image = cv::imread("img1.png");
	cv::flip(image,image,1);
	cv::imwrite("flip.jpg",image);
}

最后程序运行会出现很多warning,但是不影响运行,程序大小为7.5M!挺大的,但是一个大程序,总比一个exe跟着多个dll好啊。

6.程序运行结果

原图:

结果图:

opencv静态编译

时间: 2024-11-04 10:03:35

opencv静态编译的相关文章

VS如何设置OpenCV静态编译

  可以使用opencv提供的静态链接库也可以自己编译静态链接库. 1 使用opencv提供的静态链接库,位置如下图. 首先设置VS配置.有如下几个配置 1 工具->选项->项目和解决方案->VC++目录->包含目录.配置图中的OpenCV243那3项. 2工具->选项->项目和解决方案->VC++目录->库文件 3 项目属性->配置属性->链接器->输入->附加依赖项.把lib库全部加入. 加入完是这个样子 这里之所以要全部加如而没

利用CMake自己创建OpenCV静态链接库(VS2012+OpenCV2.4.12+TBB)

1.准备工作: 1)完成Visual Studio2012安装: 2)下载并解压CMake3.5.0: 3)下载并解压OpenCV2.4.12: 4)下载并解压TBB44_20160128oss. 2.创建OpenCV静态链接库编译项目的目标目录. 3.由CMake生成OpenCV静态链接库编译项目: 1)双击cmake-gui.exe,删除配置缓存,选择编译平台,如下图所示: 2)选择OpenCV2.4.12源码所在目录(CMakeLists.txt所在目录)以及第2步创建的静态库项目目标目录

QT全平台设置图标,全平台静态编译 good

1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装文件. QT开发的程序发布的时候经常采用两种方式: l  静态编译,可生成单一的可执行文件. l  动态编译,需同时附上需要的dll文件. 2.  发布准备 不管采用哪种方式,首先我们要把项目的发布做一些准备,例如:准备程序的图标,将项目编译成release等.   2.1. 设置程序图标 应用程序

用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)

因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要下载mingw.qt-everywhere-opensource-src-4.8.2和qt-everywhere-opensource-src-5.1.1. 然后,准备开始编译了,当然先得把压缩包解压到一个合适的地方.我这里的路径是"C:\Qt"下面. 解压完毕后,先试着编译Qt4.8.2

QtCreator 静态编译

如果要自己编译,可以参考下面的过程及需要的文件一.文件准备,下面用到的文件,可以自行到相应官网下载.我在网盘上也共享了:① qt-opensource-windows-x86-mingw48_opengl-5.2.1.exehttp://yunpan.cn/QpMMWfEYnM4fg静态编译来,只是用里面的mingw.但从搭建开发环境的角度,也建议安装.② qt-everywhere-opensource-src-5.2.1.ziphttp://yunpan.cn/Q4sYIFjYcPbRa③

静态编译Qt5.4.1和Qt WebKit

blog文章地址:http://godebug.org/index.php/archives/133/ WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉得自己编译webkit费力不讨好,所以都是用的qt官方编译好的,至于静态编译webkit,我之前一直以为是根本不可能的.后来看qt forum上说其实是可以的,不过是因为开源协议的问题qt默认的静态编译只是把webkit给排除了,自己编译一下webkit就好了,既然如此,那我就当小白试一下.不

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的.只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查

Ubuntu下Qt-4.7.1的静态编译

最近在学习Qt的静态编译,相比较来说windows的Qt静态编译比较容易,相反对于linux编译网上的文章实践下来都有这样那样的错误,这里简要小结一下自己的编译成果. 一.实验环境 1.Ubuntu 10.04 2.qt-x11-opensource-4.7.1.tar.gz 二.前期准备 在安装好Ubuntu 10.04后默认是没有安装程序编译软件包的,所以我们首先是要配置ubuntu. 配置方法:(推荐全程root用户模式) 1.首先调整网络设置使得机器可以上网(具体做法因人而异,这边就忽略

Linux下快速静态编译Qt以及Qt动态/静态版本共存

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大部分人编译这个包居然花费了12-13个小时!但是,根据我在Windows下静态编译Qt的经验,其实这之中很多东西都是可以不用编译的,最终我大约用了40分钟编译完成了全部内容.如果你直接使用官方的sdk安装,那么你就已经有了一个动态库,现在你又通过源