閲覧ありがとうございます。
まず、やりたいことは、
- 顔認識によって得られた矩形領域の下半分をROI (Region of Interest)として取り出す
これです。
なので、OpenCVでエッジ検出を参考に、C++でプログラムをビルドしてるのですが、
C++
1cv::Rect halfRect = faceRect; 2 halfRect.y += faceRect.height/2; 3 halfRect.height = faceRect.height/2 - 1; // under half of face 4 cv::Mat roi2 = gray(halfRect); 5 cascade3.detectMultiScale(roi2, founds3, 1.1, 0, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); 6 const int smile_neighbors = (int)founds3.size(); 7 static int max_neighbors=-1; 8 static int min_neighbors=-1; 9 if (min_neighbors == -1) min_neighbors = smile_neighbors; 10 max_neighbors = MAX(max_neighbors, smile_neighbors); 11 float intensityZeroOne = ((float)smile_neighbors - min_neighbors) / (max_neighbors - min_neighbors + 1); 12 cv::Rect meter(faceRect.x, faceRect.y-20, (int)100*intensityZeroOne, 20); 13 cv::rectangle(image, meter, cv::Scalar(255, 0, 0), -1); 14 cv::Rect meterFull(faceRect.x, faceRect.y-20, 100, 20); 15 cv::rectangle(image, meterFull, cv::Scalar(255, 0, 0), 1);
ここの部分だと機能が多いので
C++
1for (auto faceRect: founds) 2{ 3 cv::Mat roi = gray(faceRect); 4 cascade2.detectMultiScale(roi, founds2, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); 5 for (auto eyeRect: founds2) { 6 cv::Rect rect(faceRect.x + eyeRect.x, faceRect.y + eyeRect.y, eyeRect.width, eyeRect.height); 7 } 8 cv::Rect halfRect = faceRect; 9 halfRect.y += faceRect.height/2; 10 halfRect.height = faceRect.height/2 - 1; // under half of face 11}
これだけで顔の下半分を取り出せていると言っても大丈夫なのでしょうか?
毎日、勉強をしている素人ですが、何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/13 02:32