• C++ 多项目dll调用-隐式


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

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

    1.DLL

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

    DLL.h

    1 #define DLL_API __declspec(dllexport)  
    2 #include<iostream>  
    3 #include<opencv.hpp>
    4 
    5 
    6 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 
    16 
    17 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // some CString constructors will be explicit
    18 
    19 // turns off MFC's hiding of some common and often safely ignored warning messages
    20 #define _AFX_ALL_WARNINGS
    21 
    22 #include "../include-DAA/FaceDectectDll.h"
    23 #pragma comment(lib,"../lib-DAA/lib3000fps.lib")
    24 #pragma comment(lib,"../lib-DAA/liblinear.lib")
    25 #pragma comment(lib,"../lib-DAA/libmi_dpm.lib")
    26 #pragma comment(lib,"../lib-DAA/mi_dpm.lib")
    27 
    28 
    29 //#include <cxcore.h>
    30 //#include <highgui.h>
    31 #include<opencv.hpp>
    32 
    33 
    34 using namespace cv;
    35 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 = 0; i < nNum; i++)
    14     {
    15         cv::rectangle(im, re[i], cv::Scalar(0, 125, 255), 2);
    16         printf("%d %d %d %d
    ", re[i].x, re[i].y, re[i].width, re[i].height);
    17     }
    18     imshow("dec",im);
    19     waitKey(30);
    20     system("pause");
    21 
    22 }
  • 相关阅读:
    洛谷mNOIP模拟赛Day2-星空
    洛谷mNOIP模拟赛Day2-将军令
    洛谷mNOIP模拟赛Day2-入阵曲
    洛谷mNOIP模拟赛Day1-斐波那契
    洛谷mNOIP模拟赛Day1-数颜色
    计蒜客NOIP2017提高组模拟赛(五)day1-展览
    HDU1700Points on Cycle(圆心半径)
    HDU1086You can Solve a Geometry Problem too (斜率问题)
    湖南省第十届大学生计算机程序设计竞赛1503: 点到圆弧的距离(atan()函数的应用)
    HDU献给杭电五十周年校庆的礼物 (切蛋糕,线段划分区域)
  • 原文地址:https://www.cnblogs.com/pkjplayer/p/6537967.html
Copyright © 2020-2023  润新知