OpenCV Mat Frame作为类函数中的参数

时间:2017-07-10 21:12:34

标签: c++ opencv

编辑:已解决

目前我在尝试使用Mat framePar作为我的类函数findFaces中的参数时出现问题。它声明声明与void sampleCollection :: findFaces(const error-type& framePar)不兼容

我也遇到矩形问题(framePar,r ....);它没有说明重载函数的实例"矩形"匹配参数列表。我认为如果我可以解决framePar的问题,这可能会得到解决。我不太清楚为什么,但是开始时会有一个问题。以下是代码的一部分。

这是我的sampleCollection.h的一部分:

#ifndef _SAMPLE_COLLECTION
#define _SAMPLE_COLLECTION
#include<string>
#include<opencv/cv.hpp>
#include<stdlib.h>
#include<fstream>
class sampleCollection
{
public:
    sampleCollection();
    //void findFaces(const Mat &framePar);
    void findFaces(cv::Mat& framePar);//This is the fix for both errors.
};
#endif

这是sampleCollection.cpp文件的一部分:

#include"sampleCollection.h"
#include<iostream>
#include<opencv/cv.hpp>
using namespace std;
using namespace cv;
//void sampleCollection::findFaces(const Mat &framePar)
void sampleCollection::findFaces(cv::Mat& framePar)//This is the fix for both issues.
{
    vector<Rect> faces;

    //Format the frames of the video for detection
    cvtColor(framePar, frame_gray, COLOR_BGR2GRAY);
    equalizeHist(frame_gray, frame_gray);

    //Detect the face
    faceDetection.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    for (size_t i = 0; i < faces.size(); i = i + 1)
    {
        //Makes a rectangle boundary around the face.
        Rect r = Rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);

        //Draws the rectangle
        rectangle(framePar, r, Scalar(255, 0, 0), 2, 8, 0);

        //Collects samples
        string filename = "DataSet/User" + to_string(userID) + "/User." + to_string(userID) + "." + to_string(sampleID) + ".jpg";
        if (imwrite(filename, frame_gray(r)))
        {
            dataOut << filename << ",";
            sampleID = sampleID + 1;
        }
    }
}

起初我将所有这些代码片段放在一个.cpp中作为不同的功能并且它起作用,但它开始变得混乱,我需要添加更多,所以我试图清理将它放入课堂中。无论如何,我需要更频繁地练习使用类。

我也读过这篇文章:Differences of using "const cv::Mat &", "cv::Mat &", "cv::Mat" or "const cv::Mat" as function parameters? 但它显示有Mat输入和Mat输出,我不确定这是否会改变我当前的问题?

我想,从main.cpp int main()能够设置摄像机并将帧从它的视图发送到类,这样我就可以在类中进行所有计算。

谢谢。

0 个答案:

没有答案