嗨,我正在尝试调试 C++/C 开发人员代码,他给我们写了一个 dll,我们在 adobe 本机扩展程序中使用该扩展程序,该扩展程序基本上使用网络摄像头网格拍照,并且在进行一些面部检测后假设裁剪图像并编写他们光盘。
但是应用程序总是挂起并最终在这条线上崩溃:
smallFrame = image(Rect(x, y, CROPPING_WIDTH, CROPPING_HEIGHT));
我通过在它周围抛出一个 try/catch 将它缩小到这一行,它吐出的异常不是很有帮助,它只是说 ???????n 作为异常。
像这样:
try
{
smallFrame = image(Rect(x, y, CROPPING_WIDTH, CROPPING_HEIGHT));
}
catch(exception ex)
{
wsprintf (str, L"Exception Occured during Face Found : %s", ex.what());
WriteLogFile(str);
smallFrame = frame;
}
这是整个方法:
Mat cropFaceFrame( Mat frame)
{
std::vector<Rect> faces;
Mat frame_gray, smallFrame;
int height = 0;
unsigned index, i;
cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(60, 60));
index = faces.size();
wsprintf (str, L
for (i = 0; i < faces.size(); i++ )
{
if (height < faces[i].height)
{
height = faces[i].height;
index = i;
}
}
Mat image(frame);
int maxRight, maxDown;
maxRight = IMAGE_WIDTH-CROPPING_WIDTH -1;
// right margin
maxDown = IMAGE_HEIGHT-CROPPING_HEIGHT-1;
// down margin
if (index == faces.size())
{
// crop the center part if no face found
try
{
smallFrame = image(Rect(maxRight/2, maxDown/2, CROPPING_WIDTH, CROPPING_HEIGHT));
}
catch(exception ex)
{
smallFrame = frame;
}
}
else
{
int x, y;
x = faces[index].x - (CROPPING_WIDTH-faces[index].width)/2;
if (x < 0) x = 0;
else if (x > maxRight) x = maxRight;
y = faces[index].y - (CROPPING_HEIGHT-faces[index].height)/3;
if (y < 0) y = 0;
else if (y > maxDown) y = maxDown;
try
{
smallFrame = image(Rect(x, y, CROPPING_WIDTH, CROPPING_HEIGHT));
}
catch(exception ex)
{
wsprintf (str, L
"Exception Occured during no Face Found : %s", ex.what());
WriteLogFile(str);
smallFrame = frame;
}
}
return smallFrame;
}