我在python 3 opencv中使用了haarcascade_frontalface_default使用i7 4 gen cpu在100毫秒内处理每一帧,然后我决定通过将代码转移到C ++中来加快代码的速度。我使用了Visual Studio c ++控制台应用程序和opencv 4的最新更新,但结果很奇怪,编译后的exe文件在400毫秒内每帧处理一次,比python慢4倍。
我不明白为什么?我以为C ++会更快。
#include "pch.h"
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/core//types_c.h"
#include <iostream>
using namespace std;
using namespace cv;
void detectAndDraw(Mat& img, CascadeClassifier& cascade);
const static Scalar colors[] =
{
Scalar(255,0,0),
Scalar(255,128,0),
Scalar(255,255,0),
Scalar(0,255,0),
Scalar(0,128,255),
Scalar(0,255,255),
Scalar(0,0,255),
Scalar(255,0,255)
};
int main()
{
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_default.xml");
VideoCapture cap(0); // open the default camera
if (!cap.isOpened()) // check if we succeeded
return -1;
for (;;)
{
Mat frame;
cap >> frame;
double t = (double)getTickCount();
detectAndDraw(frame, cascade);
t = (double)getTickCount() - t;
printf("detection time = %g ms\n", t * 1000 / getTickFrequency());
//imshow("edges", frame);
if (waitKey(30) >= 0) break;
}
return 0;
}
void detectAndDraw(Mat& img, CascadeClassifier& cascade)
{
vector<Rect> faces;
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
cascade.detectMultiScale(gray, faces,
1.1, 2, CASCADE_SCALE_IMAGE,
Size(30, 30));
for (size_t i = 0; i < faces.size(); i++)
{
Rect r = faces[i];
rectangle(img, Point(cvRound(r.x), cvRound(r.y)),
Point(cvRound((r.x + r.width - 1)), cvRound((r.y + r.height - 1))),
colors[i % 8], 1, 8, 0);
}
imshow("result", img);
}
问题已解决
我应该以发布模式构建项目。