编辑:已解决
目前我在尝试使用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()能够设置摄像机并将帧从它的视图发送到类,这样我就可以在类中进行所有计算。
谢谢。