2014-03-04 29 views
0

我正在開發opencv中的圖像處理以檢測圖像中的面部並對它們執行進一步處理。我被卡在一個點,在那裏我試圖分析檢測到的面部在圖像中。我想通過他檢測到的面部區域到一個新的功能,並只顯示圖像的一部分,但我得到以下錯誤: 無效參數:「路徑位置類型無匹配的'operator ='(操作數類型'cv :: Mat'和'cv :: Rect_')「aa.cpp/aa/src line 65 C/C++問題從opencv 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(); 
    } 

回答

0

問題來源於此行:

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

,你正嘗試將cv::Rect分配給cv::Mat

爲了獲得圖像的ROI區域,應將其更改爲類似:

img = frame(faces[i]); 
相關問題