dll打包以及調(diào)用

主要是為了給c++打包opencv的dll庫
參考:https://blog.csdn.net/m0_37170593/article/details/76445972
https://blog.csdn.net/hit2015spring/article/details/52624985(需要注意頭文件)
https://blog.csdn.net/dearKundy/article/details/73331514

1.生成dll

1.創(chuàng)建dll生成項目

創(chuàng)建dll生成工程

此時測試的文件目錄:
generdll.cpp是會因為項目名稱的不同而不同~


文件目錄

2.添加generdll.cpp對應(yīng)的頭文件

頭文件作用:創(chuàng)建接口,以供多個cpp文件公用;[http://www.cplusplus.com/forum/articles/10627/]
此時工程目錄如下:

圖片.png

3.修改文件

1.創(chuàng)建對應(yīng)程序的頭文件(generdll.h)

_declspec(dllexport)表示你要把自己的代碼生成dll給別人用,需要導(dǎo)出函數(shù)給別人。
_declspec(dllimport)表示你在調(diào)用別人的dll里面的函數(shù)

#pragma once

#include<string>

using namespace std;

__declspec(dllexport) int opencv_dll_main(string sImagePath);
__declspec(dllexport) void opencv_lines_main(string sImagePath);
2.創(chuàng)建cpp文件(generdll.cpp)

接口函數(shù)的調(diào)用函數(shù)正常定義聲明就可以了;接口函數(shù)無需提前聲明。

// generdll.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。
//

#include "stdafx.h"
#include<iostream> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2\imgproc\imgproc.hpp>
#include <string>

using namespace cv;
using namespace std;

void cvThin(cv::Mat& src, cv::Mat& dst, int intera);
double get_point_angle(CvPoint pointO, CvPoint pointA);
void rotate_arbitrarily_angle(Mat &src, Mat &dst, double angle);

__declspec(dllexport) int opencv_dll_main(string sImagePath)
{

    // 讀入一張圖片(測試圖) 
    Mat img = imread(sImagePath), tempImage;

    // 創(chuàng)建一個名為 "處理后圖片"的窗口 
    cvNamedWindow("處理后圖片", 0);
    cvResizeWindow("處理后圖片", int(img.rows), int(img.rows));
    cvNamedWindow("原始圖片", 0);
    cvResizeWindow("原始圖片", int(img.rows), int(img.rows));
    //進(jìn)行顏色空間的轉(zhuǎn)換
    cvtColor(img, tempImage, COLOR_LBGR2Lab);
    // 在窗口中顯示測試圖 
    imshow("處理后圖片", tempImage);
    imshow("原始圖片", img);
    // 等待操作,關(guān)閉顯示

    waitKey(0);
    return 0;
}

__declspec(dllexport) void opencv_lines_main(string sImagePath)
{
    cout << "enter success!" << endl;
    Mat imgHSV, imgray, mask, dstimage, rotateimage;
    Mat image = imread(sImagePath);
    Mat rotate_orimage, orimage = image;

    const int alpha = 100;
    double angree = 0, angree2 = 0;

    Scalar whiteUSL = Scalar(180, 30, 255);
    Scalar whiteLSL = Scalar(0, 0, 221);
    vector<Mat> hsvSplit;

    imshow("origin", image);
    cvtColor(image, imgray, CV_BGR2GRAY);//灰度圖
                                         //cvtColor(orimage, orimage, CV_BGR2GRAY);//源圖像灰度圖
                                         //imshow("gray", imgray);
    cvtColor(image, imgHSV, CV_BGR2HSV);//轉(zhuǎn)化為HSV
                                        //imshow("imgHSV", imgHSV);


                                        //轉(zhuǎn)化成直方圖均衡化
    split(imgHSV, hsvSplit);
    equalizeHist(hsvSplit[2], hsvSplit[2]);
    merge(hsvSplit, imgHSV);
    //imshow("imgHSV2", imgHSV);

    inRange(imgHSV, whiteLSL, whiteUSL, mask);
    //imshow("mask", mask);

    cvThin(mask, dstimage, 6);
    imshow("thin", dstimage);

    Mat image_canny(image.size(), CV_8UC1, Scalar(0));//創(chuàng)建圖像存儲邊緣
                                                      //imshow("image_canny", imgHSV);
    Canny(imgHSV, image_canny, 100, 150, 3, true);//Canny邊緣處理

    imshow("result", image_canny);

    vector<Vec2f> lines;
    HoughLines(dstimage, lines, 1, CV_PI / 180, 150, 0, 0);
    cout << "size:" << lines.size() << endl;

    waitKey(0);
}

void cvThin(cv::Mat& src, cv::Mat& dst, int intera)
{
}

double get_point_angle(CvPoint pointO, CvPoint pointA)
{
}

void rotate_arbitrarily_angle(Mat &src, Mat &dst, double angle)
{
}

4.生成dll文件

生成了dll和lib文件


圖片.png

2.調(diào)用dll文件

1.創(chuàng)建工程

基本和創(chuàng)建dll工程沒有區(qū)別,但是有一個需要注意的地方:


創(chuàng)建工程.png

我一般都是選擇空項目,不過不選擇也是可以的~

工程目錄如下:


工程目錄

2.添加dll文件

C:\generdll\x64\Debug這個文件目錄中復(fù)制這兩項到當(dāng)前目錄下

復(fù)制dll和lib

C:generdll這個文件目錄中復(fù)制generatedll.h(在生成dll文件是添加的頭文件)到當(dāng)前目錄下
此時當(dāng)前目錄的:
添加dll、lib和頭文件之后的目錄情況

3.添加文件到工程中

.lib文件添加到資源文件中,.h文件添加到頭文件中;

圖片.png

4.修改main.cpp文件
#include<iostream>
#include "generdll.h"http://注意添加頭文件哦
#include<string>

using namespace std;

int main()
{
    string path = "C:\\2020.png";
    int a = opencv_dll_main(path);
    opencv_lines_main(path);
    cout << "ok" << endl;
    return 0;
}

雖然.lib讓人有點困惑,但是是之后還是可以愉快的運行了

.lib文件的問題下此解決,準(zhǔn)備上班~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容