vs下opencv的人脸检测以及qt下dll的封装调用(二、dll的创建)
来源:互联网 发布:微软怎么下载软件 编辑:程序博客网 时间:2024/04/29 00:27
一、vs下新建main.cpp
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include <windows.h> BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;}
二、新建detectdll.cpp
#include "opencv/cv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <time.h>#include <iostream> #include <stdio.h> #include <opencv2/opencv.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace std;using namespace cv;IplImage* cutImage(IplImage* src, CvRect rect) {cvSetImageROI(src, rect);IplImage* dst = cvCreateImage(cvSize(rect.width, rect.height),src->depth,src->nChannels);cvCopy(src, dst, 0);cvResetImageROI(src);return dst;}IplImage* detect1(Mat& img, CascadeClassifier& cascade, double scale){int i = 0;double t = 0;vector<Rect> faces;Mat gray, smallImg(cvRound(img.rows / scale), cvRound(img.cols / scale), CV_8UC1);cvtColor(img, gray, CV_BGR2GRAY);resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);equalizeHist(smallImg, smallImg);t = (double)cvGetTickCount();cascade.detectMultiScale(smallImg, faces,1.3, 2, CV_HAAR_SCALE_IMAGE,Size(80, 80));t = (double)cvGetTickCount() - t;printf("detection time = %g ms\n", t / ((double)cvGetTickFrequency()*1000.));for (vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++){IplImage* temp = cutImage(&(IplImage(img)), cvRect(r->x, r->y, r->width, r->height));return temp;}return NULL;}IplImage* det(Mat srcImg, char* path, String cascadeName){IplImage *dst1 = 0;//目标图像指针IplImage *dst2 = 0;//目标图像指针CvSize dst_cvsize;//目标图像尺寸CascadeClassifier cascade;if (!cascade.load(cascadeName)){cout << "cascade not load" << endl;}IplImage* faceImage1;clock_t start2, finish2;double totaltime2;start2 = clock();faceImage1 = detect1(srcImg, cascade, 1);finish2 = clock();totaltime2 = (double)(finish2 - start2) / CLOCKS_PER_SEC;std::cout << "detectface time is :" << totaltime2 << "sec" << std::endl;if (faceImage1 == NULL) {cout << "no image" << endl;}dst_cvsize.width = 224;//目标图像的宽为源图象宽的scale倍dst_cvsize.height = 224;//目标图像的高为源图象高的scale倍dst1 = cvCreateImage(dst_cvsize, faceImage1->depth, faceImage1->nChannels);//构造目标图象// cvResize(src, dst, CV_INTER_LINEAR);//缩放源图像到目标图像cvResize(faceImage1, dst1, CV_INTER_CUBIC);//缩放源图像到目标图像cvSaveImage(path, dst1, 0);// cvSaveImage("d:\\face.jpg", faceImage1, 0); cv::Mat im1 = cv::cvarrToMat(dst1);cvReleaseImage(&faceImage1);return dst1;}三、新建头文件detectdll.h
#include "opencv/cv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <time.h>#include <iostream> #include <stdio.h> #include <opencv2/opencv.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace std;using namespace cv;IplImage* cutImage(IplImage* src, CvRect rect);IplImage* detect1(Mat& img, CascadeClassifier& cascade, double scale);IplImage* det(Mat srcImg, char* path, String cascadeName);四、新建source.def
把函数写在这里,然后空格@+数字,如果某个函数报错,试着改个名字(我的detect函数一直抱错,换成detect1就好了)
LIBRARY "detectdll" EXPORTS cutImage @1 detect1 @2 det @3五、重新生成就好拉
0 0
- vs下opencv的人脸检测以及qt下dll的封装调用(二、dll的创建)
- vs下opencv的人脸检测以及qt下dll的封装调用(三、vs下测试dll)
- vs下opencv的人脸检测以及qt下dll的封装调用(四、qt下测试dll)
- vs下opencv的人脸检测以及qt下dll的封装调用(一、opencv下的人脸检测以及图片的保存)
- Qt DLL总结【二】-创建及调用QT的 DLL
- Qt DLL总结【二】-创建及调用QT的 DLL
- VS2010下Dll的二次封装以及显示调用
- c#下DLL文件的封装以及调用
- qt下调用dll的方法
- Qt 5.9.1、VS 2017创建DLL的互相调用
- qt下调用dll的方法(转)
- windows 下Qt调用Qt生成的dll
- Qt DLL总结-创建及调用QT的 DLL
- Qt DLL总结-创建及调用QT的 DLL
- VS下C的dll打包与调用
- C++在VS下创建、调用dll
- MFC 下调用Qt编写的含界面的dll
- LoadRunner下DLL的调用
- 开发工作笔记(一)
- spring boot中使用generator插件自动生成代码
- android应用程序分享,蓝牙文件传输(代码)
- hive创建表格以及加载数据
- 【转载】Google Protobuf 协议分析
- vs下opencv的人脸检测以及qt下dll的封装调用(二、dll的创建)
- 使用IBM ServerGuide安装操作系统
- ThinkPHP5的验证码 NOT FOUND
- Java概述
- 公告
- 【javaEE】【Mybatis】【JDBC】问题
- JavaScript中的this
- android组件ListView之SimpleAdapter简单使用
- XDU 1028 G.锘爷考驾照