WIN10+YOLOv4 C++调用Yolov4生成的DLL

1,创建一个vs项目并把所有需要的文件放在项目目录

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第1张图片
1.1生成GPU版DLL,
1.1.1右键txt打开yolo_cpp_dll.vcxproj修改配置改成CUDA 10.2,共2处
WIN10+YOLOv4 C++调用Yolov4生成的DLL_第2张图片WIN10+YOLOv4 C++调用Yolov4生成的DLL_第3张图片

1.2打开yolo_cpp_dll.sln,右键项目生成
WIN10+YOLOv4 C++调用Yolov4生成的DLL_第4张图片
WIN10+YOLOv4 C++调用Yolov4生成的DLL_第5张图片

1.2其他DLL如果找不到就在全盘搜;

2,头文件里和资源里添加相应文件

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第6张图片

3,添加包含目录和库目录

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第7张图片
WIN10+YOLOv4 C++调用Yolov4生成的DLL_第8张图片

4,添加附加包含目录

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第9张图片

5,预处理定义添加_CRT_SECURE_NO_WARNINGS

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第10张图片

6,不使用预编译头

WIN10+YOLOv4 C++调用Yolov4生成的DLL_第11张图片
7,完整代码

#ifdef _WIN32
#define OPENCV
#define GPU
#endif

#include 
#include 
#include "yolo_v2_class.hpp"	// imported functions from DLL
#include 	// C++
#include "opencv2/highgui/highgui.hpp"  
#pragma comment(lib, "opencv_world340.lib")//引入链接库

using namespace cv;
using namespace std;

uchar* BGR;
HDC hScreen, g_stcMemDc;
int Screenshot_W = 800;
int Screenshot_H = 600;

BITMAPINFOHEADER bmi = { 0 };

void Screenshot()
{
	if (BGR == NULL)
		BGR = new uchar[Screenshot_W * Screenshot_H * 3];
	if (hScreen == NULL)
		hScreen = CreateDC(L"DISPLAY", 0, 0, 0);
	if (bmi.biSize == 0)
	{
		bmi.biSize = sizeof(BITMAPINFOHEADER);
		bmi.biPlanes = 1;
		bmi.biBitCount = 24;
		bmi.biWidth = Screenshot_W;
		bmi.biHeight = -Screenshot_H;
		bmi.biCompression = BI_RGB;
		bmi.biSizeImage = Screenshot_W * Screenshot_H;
	}

	g_stcMemDc = CreateCompatibleDC(hScreen);
	HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, Screenshot_W, Screenshot_H);
	SelectObject(g_stcMemDc, hBitmap);
	BitBlt(g_stcMemDc, 0, 0, Screenshot_W, Screenshot_H, hScreen, 0, 0, SRCCOPY);
	GetDIBits(g_stcMemDc, hBitmap, 0, Screenshot_H, BGR, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
	DeleteDC(g_stcMemDc);
	DeleteObject(hBitmap);
}


vector<bbox_t> DetectionObject; //0 角色|1 怪物|2 领主

int main()
{
	Detector detector("wzx.cfg", "wzx.weights");//初始化检测器
	Mat ScreenshotMat(Screenshot_H, Screenshot_W, CV_8UC3, Scalar(0, 0, 255));
	while (true)
	{
		Screenshot();
		ScreenshotMat.data = BGR;
		DetectionObject = detector.detect(ScreenshotMat);
		for (int i = 0; i < DetectionObject.size(); i++)
			cout << "对象索引:" << DetectionObject[i].obj_id << "| x:" << DetectionObject[i].x << "|y:" << DetectionObject[i].y << "|w:" << DetectionObject[i].w << "|h:" << DetectionObject[i].h << "其他:" << DetectionObject[i].frames_counter<<"|"<< DetectionObject[i].prob << "|"<< DetectionObject[i].track_id << endl;
		cout << "------------------------------------------------------------------" << endl;
	}
	return 0;
}

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