我正在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();
}
答案 0 :(得分:0)
问题来自这一行:
img = faces[i];
^^^ ^^^^^^^^
| |
'Mat' 'Rect'
您尝试将cv::Rect
分配给cv::Mat
。
要获取图像的ROI区域,您应该将其更改为:
img = frame(faces[i]);