将DAA人脸检测做成动态库以便其他程序调用,采用隐式调用完成。

给出部分关于dll制作的关键代码:

1.DLL

多项目DLL编写注意将其他相关项目设置成静态库,以及各库涉及的版本一致性。

DLL.h

  1. #define DLL_API __declspec(dllexport)
  2. #include<iostream>
  3. #include<opencv.hpp>
  4.  
  5. DLL_API void FaceDecter(cv::Mat& source,std::vector<cv::Rect>& rects);

DLL.cpp

  1. #include "stdafx.h"
  2. #include "FaceDectectDll.h"
  3. #include "../libmi_dpm/face_detector.hpp"
  4. #include <fstream>
  5.  
  6. using namespace std;
  7. using namespace mi_dpm;
  8. using namespace cv;
  9.  
  10. DLL_API void FaceDecter(cv::Mat &source, std::vector <cv::Rect> & rects)
  11. {
  12. Detector face_det;
  13. face_det.detectInit();
  14. vector<float> scores;
  15. vector<int> picked;
  16. picked = face_det.detectFastMerge(source, rects, scores);
  17. }

2.DLL调用

在demo中新建文件夹 lib-DAA ,include-DAA 存放静态库以及相关头文件,在可执行文件下放入动态库dll。

demo.h

  1. // stdafx.h : include file for standard system include files,
  2. // or project specific include files that are used frequently,
  3. // but are changed infrequently
  4.  
  5. #pragma once
  6.  
  7. #ifndef _SECURE_ATL
  8. #define _SECURE_ATL 1
  9. #endif
  10.  
  11. #ifndef VC_EXTRALEAN
  12. #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
  13. #endif
  14.  
  15. #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
  16.  
  17. // turns off MFC's hiding of some common and often safely ignored warning messages
  18. #define _AFX_ALL_WARNINGS
  19.  
  20. #include "../include-DAA/FaceDectectDll.h"
  21. #pragma comment(lib,"../lib-DAA/lib3000fps.lib")
  22. #pragma comment(lib,"../lib-DAA/liblinear.lib")
  23. #pragma comment(lib,"../lib-DAA/libmi_dpm.lib")
  24. #pragma comment(lib,"../lib-DAA/mi_dpm.lib")
  25.  
  26. //#include <cxcore.h>
  27. //#include <highgui.h>
  28. #include<opencv.hpp>
  29.  
  30. using namespace cv;
  31. using namespace std;

demo.cpp

  1. #include <iostream>
  2. #include "stdafx.h"
  3.  
  4. //#include <Windows.h>
  5.  
  6. int main()
  7. {
  8. Mat im = imread("F:/科研/人脸识别/DAA/mi_dpm/mi_dpm/testpic/tmp_rs.jpg");
  9. vector<Rect> re;// = FaceDecter(im);
  10. FaceDecter(im, re);
  11. int nNum = re.size();
  12. cout << nNum << endl;
  13. for (int i = ; i < nNum; i++)
  14. {
  15. cv::rectangle(im, re[i], cv::Scalar(, , ), );
  16. printf("%d %d %d %d\n", re[i].x, re[i].y, re[i].width, re[i].height);
  17. }
  18. imshow("dec",im);
  19. waitKey();
  20. system("pause");
  21.  
  22. }

C++ 多项目dll调用-隐式的更多相关文章

  1. C++ dll的隐式与显式调用

    应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息.Visual C++6.0(或者更先进的版本)在VC\bin目录下提供了一个名为 ...

  2. Java 显示调用隐式调用

    当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法.比如:父类:class Animal{ private String name; //如果你定义一个新的构造 ...

  3. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...

  4. Scala入门系列(十二):隐式转换

    引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...

  5. 显式与隐式(ExplicitAndImplicit)

    显式与隐式(Explicit And Implicit) 1.概念 1.1 显式 实现的单词Explicit意思是清楚的.明确的.详述的.所以,显式的“显”是指明显且清楚的实现,相对于接口来说,就是明 ...

  6. Scala 隐式(implicit)详解

    文章正文 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码. 1.Spark 中 ...

  7. C++隐式转换与显式转换

    普通类型的转换顺序:隐式把char——>int和从short——>double.转换可能会导致数据的丢失. 自定义类型:有两种函数可以进行隐式转换,单参数构造函数 和 隐式类型转换符.   ...

  8. C++隐式类类型转化

    隐式类类型转换:可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换 class Person { public: Person(): mName()name, mAge ...

  9. scala的隐式转换学习总结(详细)

    一,隐式转换函数 1, 格式, implicit def 函数名(参数):返回值类型={ //函数体 //返回值 } 2,例子: //导入对应的规则类,以免出现警告 scala> import ...

随机推荐

  1. Java8期间及持续时间

    原文:http://www.yiibai.com/java8/java8_periodduration.html 使用Java8,两个专门类引入来处理时间差. Period - 处理有关基于时间的日期 ...

  2. 【JSON注解】注解@JsonIgnoreProperties和@JsonIgnore的另一个使用情况

    之前关于这两个注解,是用在JSON循环引用的情况上,那么现在关于这两个注解,还可以使用在另外一种情况上 即: 一般标记在属性或者方法上,返回的json数据即不包含该属性 关于这种情况在什么时候会遇到呢 ...

  3. POJ 题目3450 Corporate Identity(KMP 暴力)

    Corporate Identity Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5493   Accepted: 201 ...

  4. 全能无线渗透测试工具,一个LAZY就搞定了

    近来一直在研究无线安全方面的东西,特别是在无线渗透测试这块,每次渗透测试时总要来回不停的切换操作和挑选利器,很是麻烦.就想看看是否可以有一款功能全面的集合型工具. 正所谓功夫不负有心人,还真有这么一个 ...

  5. chromium爱好者不可错过的一个开源分支

    这次我要推荐下http://bloomberg.github.com/chromium.bb, 名字就叫chromium.bb,特点是专门的windows ports,关键是极大的简化了原版chrom ...

  6. Bootstrap的表单控件

    支持的表单控件 Bootstrap 支持最常见的表单控件,主要是 input.textarea.checkbox.radio 和 select. 输入框(Input) 最常见的表单文本字段是输入框 i ...

  7. UML类间关系

    1继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系通过关键字exten ...

  8. Material Design (四),AppBarLayout的使用

    前言  AppBarLayout,顾名知意.就是用来给AppBar布局的容器,是LinearLayout的子类.而AppBar就包括我们通常所知道的ActionBar,Toolbar. AppBarL ...

  9. eureka高可用注册中心

    Eureka高可用注册中心 两个配置文件: application-peer1.properties application-peer2.properties 都需要加上 eureka.client. ...

  10. WPF使用HierarchicalDataTemplate绑定Dictionary生成TreeView

    Dictionary中的<string, CustomeType>CustomeType是一个集合,将其绑定生成一棵树,树的第一层节点是Dictionary的Key,第二层是Custome ...