検出/表示を別の機能に分割しないと、時間がかかることがあります。私は以下のOpenCVのドキュメントコードを変更しました。私はこれをコンパイルまたは実行していないので、いくつかのエラーがあるかもしれないことを覚えておいてください。しかし、問題に対処するための別の方法のアイディアを与えるべきです。
/** @function main */
int main(int argc, const char** argv)
{
CvCapture* capture;
Mat frame;
//-- 1. Load the cascades
if(!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading\n"); return -1; };
if(!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading\n"); return -1; };
//-- 2. Read the video stream
capture = cvCaptureFromCAM(-1);
if(capture)
{
//store faces here
std::vector<Mat> prev_faces;
std::vector<Mat> current_faces;
while(true)
{
frame = cvQueryFrame(capture);
//-- 3. Apply the classifier to the frame
if(!frame.empty())
{
std::vector<Rect> faces;
Mat frame_gray;
cvtColor(frame, frame_gray, CV_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
//-- Detect faces
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));
for(size_t i = 0; i < faces.size(); i++)
{
Mat faceROI = frame_gray(faces[i]);
current_faces.push_back(faceROI); //adds all of the current detections to a vector
}
if (prev_faces.size() > 0 && current_faces.size() > 0)
{
// do stuff with prev_faces and current_faces
// for(int i = 0; i < prev_faces.size(); i++){
// imshow("previous", prev_faces[i])
// }
// for(int i = 0; i < prev_faces.size(); i++){
// imshow("current", current_faces[i])
// }
// imshow("stuff", other_cool_Mats_I_made_by_analysing_and_comparing_prev_and_current)
}
prev_faces = current_faces;
current_faces.erase(current_faces.begin(), current_faces.end());
else
{ printf(" --(!) No captured frame -- Break!"); break; }
int c = waitKey(10);
if((char)c == 'c') { break; }
}
}
return 0;
}
したがって、 'faceROI'は、そのフレーム内の顔の一方のROIであり、それは今、同じフレーム内の異なる顔を見ているため、ループの反復のためにそれぞれを再宣言だ理由です。 そのフレームにある顔のすべてのROIを持つ画像を取得しようとしていますか?または、次のフレームのすべてのfaceROIにあるフレームのすべてのfaceROIを比較しようとしていますか? グローバル 'マットpreviousROI'と' clone'-INGのimshows後faceROI' 'から、それが動作するはずのセットアップ、2フレーム目faceROIsに1フレーム内のすべてのfaceROIsを比較しようとしている場合は(目になりますしかし、まだそこにいる) –
@ RachelL 1. "あなたは、そのフレーム内の顔のすべてのROIを持つ画像を取得しようとしていますか?"いいえ、私は一度に1つずつ気にします。 2. "あなたは、次のフレームのすべてのfaceROIにあるフレームのすべてのfaceROIを比較しようとしていますか?"それもやっていませんが、後でやるので、前のフレームを保存します。 3.「あるフレーム内のすべてのfaceROIを2番目のフレームのfaceROIと比較しようとしている場合は、グローバルなMat previousROIを設定し、faceROIからクローン化してください。」と私は後で比較しようとしますが、 ** 1 **前のフレームを保存する必要があります。 4.目=私はそれを使わない –
@レイチェルなのでクローニングとショーは私の問題を解決しないので良い解決策だとは思わない。前の画像/フレームは何とか保存する必要があります。 –