haarcascade_frontalface_default C ++比python慢 ?

问题描述 投票:0回答:1

我在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);
}

python c++ opencv
1个回答
0
投票

问题已解决

我应该以发布模式构建项目。

© www.soinside.com 2019 - 2024. All rights reserved.