在opencv c ++中从图像中提取检测到的面,以便进一步处理

时间:2014-03-04 05:33:26

标签: c++ opencv image-processing

我正在opencv中进行图像处理,以检测图像中的面部并对它们进行进一步处理。我卡在了我试图分析图像中检测到的面部的位置。我想通过他检测到的区域面部到新功能,只显示图像的那一部分,但我得到以下错误:     参数无效:“路径位置类型不匹配'运算符='(操作数类型是'cv :: Mat'和'cv :: Rect_')”aa.cpp / aa / src第65行C / C ++问题

如果可能,请告诉我一些解决方案。 三江源

#include "iostream"
#include "opencv2/opencv.hpp"



 using namespace std;
 using namespace cv;


  void detectAndDisplay( Mat frame );


  String face_cascade_name = "cascade.xml";

  CascadeClassifier face_cascade;





 int main( int argc, const char** argv )
 {

  Mat frame;
  frame=imread("Images/img20140226195004.jpg");
  if( !face_cascade.load( face_cascade_name ) )
   {
   printf("--(!)Error loading\n");
   return -1;
    }
  if( !frame.empty() )
   {
   detectAndDisplay( frame );
   }
 return 0;
}

void totest(Mat img)
{
imshow("detected",img);
cvtColor(img,img,CV_RGB2GRAY);
cvCanny(img,img,20,100,3);
imshow("edged",img);

}
void detectAndDisplay( Mat frame )
{
    std::vector<Rect> faces;
    Mat frame_gray;
     std::vector<Rect> fff;
     cvtColor( frame, frame_gray, CV_BGR2GRAY );
          equalizeHist( frame_gray, frame_gray );


       face_cascade.detectMultiScale( frame_gray, faces, 1.1, 3, 0, Size(115,115) );
         int x;

        for( size_t i = 0; i < faces.size(); i++ )
        {
            x++;
             Point center( faces[i].x + faces[i].width*0.5, faces[i].y +                    faces[i].height*0.5 );
              ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
        Mat img;
       img=faces[i];
              totest(img);
       }
    imshow( "faces", frame );
        waitKey();
   }

1 个答案:

答案 0 :(得分:0)

问题来自这一行:

img = faces[i];
^^^   ^^^^^^^^
 |       |
'Mat'  'Rect'

您尝试将cv::Rect分配给cv::Mat

要获取图像的ROI区域,您应该将其更改为:

img = frame(faces[i]);