主要是為了給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)備上班~~~