VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)

本文是一篇介绍如何将你写的opencv C++程序以及本地OPENCV 环境打包成一个dll(仅在Windows端),然后可移植在其他干净的电脑上运行的博客。
本文所用的IDE VS2010
OPENCV C++版本 2.4.11
首先,新建一个C++类库:
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第1张图片
把opencv 源码和lib 文件放在该工程目录下:
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第2张图片
我把opencv 源码文件夹 opencv opencv2 放在一起在opencv_source这个文件夹下:
在这里插入图片描述
然后与VS2010搭配使用的是VC10文件夹。
你只需要保留lib文件夹即可,其他的都可以删掉。在这里插入图片描述
打开工程属性:
最好调成release版本,因为会更小,编译的更快。
然后平台设为x64,因为我这里是64位编译的opencv。
项目默认值按照这里设置。
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第3张图片
下面是如何设置包含目录和库目录,这是最重要的一环。
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第4张图片
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第5张图片
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第6张图片
你还需要opencv 的lib , 这样才能在一起编译。记住,在附加依赖项这一栏里,你需要写上所有的release版本的lib库文件,就是文件名不带字母 d 的:
opencv_calib3d2411.lib
opencv_contrib2411.lib
opencv_core2411.lib
opencv_features2d2411.lib
opencv_flann2411.lib
opencv_gpu2411.lib
opencv_highgui2411.lib
opencv_imgproc2411.lib
opencv_legacy2411.lib
opencv_ml2411.lib
opencv_objdetect2411.lib
opencv_ts2411.lib
opencv_video2411.lib
这些文件都是在这里找到:
你把不带 字母 d 的都写上为好,写多了不当紧。
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第7张图片
写在连接器->输入->附加依赖项里,如下所示:
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第8张图片
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第9张图片
工程属性配置完毕。
接下来介绍源代码:

这里我的工程名字为AudioVideoDll, 那么你就需要在AudioVideoDll.h 这个头文件里加入到你所需要让调用程序使用的接口:
(关于 extern “C” _declspec(dllexport) 请自行百度)

// AudioVideoDll.h

#pragma once
#define _EXTERN_C_  extern "C"  _declspec(dllexport)
#include 
using namespace std;
_EXTERN_C_	int CalKaDun(char* _filename);

然后再在AudioVideoDll.cpp里写下你的源代码:

// 这是主 DLL 文件。根据需要引入你所需要的STL库与算法库,还有opencv库。

#include "stdafx.h"

#include "AudioVideoDll.h"
#include 

#include 
#include 
#include
#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 
#include "SFR.h"
using namespace cv;
using namespace std;

//有无卡顿
int CalKaDun(char* _filename){
	/*你的源代码*/
}

这里我仅仅简单介绍过程,所以源代码部分可以省略。事实上,一个大的过程编译成的动态链接库是很多函数接口暴漏出来的。

编译》》》》

点生成解决方案即可。

将生成的DLL 拿出来,这里就是
AudioVideoDll.dll

VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第10张图片

下面讲如何使用它:
新建一个C# 控制台程序即可,简单点。
设置成release版的:
在这里插入图片描述

VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第11张图片

先把C# 工程生成一下:
然后把AudioVideoDll.dll 放在 该C# 工程bin下:
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第12张图片
C# 如何调用C++ DLL 我从简介绍即可:

//你的C++调用类Functions:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace CSharpUseAudioVideoDll
{
	class Functioncs
	{
		[DllImport("AudioVideoDll.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
		public extern static int CalKaDun(ref byte filename);
	}
}

//你的测试类Program:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpUseAudioVideoDll
{
	class Program
	{
		static void Main(string[] args)
		{
			byte[] srcBytes = System.Text.Encoding.ASCII.GetBytes("man_made.avi");
			Console.WriteLine("计算卡顿:");
			Console.WriteLine(Functioncs.CalKaDun(ref srcBytes[0]));
			Console.ReadKey();
		}
	}
}

下面又是一个重点:
如何移植:
先生成编译一下:
然后把你编译好的C# exe可执行文件和opencv C++的DLL与lib 文件放在一起即可

VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第13张图片
上面图片,VC10就是opencv c++ 的lib文件
AudioVideoDll.dll就是你打包的dll。
CSharpUseAudioVideoDll.exe就是你的C# exe。
其他是实验视频。
接下来的就是一组opencv c++ 的dll 了,把他们和你的AudioVideoDll.dll
CSharpUseAudioVideoDll.exe
放在一起。

放在一个文件夹内,移植到一台干净的电脑上即可运行:
VS2010 + OpenCV 2.4.11 编写打包dll(具备移植性)_第14张图片
完。

你可能感兴趣的:(opencv,visual,studio,计算机视觉)