设置标志,看是否是同一个人脸进入到识别区域
//标志是否是同一个人脸进入到识别区域
int flag;
构造函数内声明flag为0
flag = 0;
人脸进入检测框后隔一段时间,等人脸稳定下来后再发送
flag初始为0,检测到人脸++,大于2时发送数据,发送之后置为-2,重新进行flag计数,大于2再进行发送
if(faceRects.size()>0 && flag>=0)
{
Rect rect = faceRects.at(0); //第一个人脸矩形框
//rectangle(SrcImage, rect, Scalar(0, 0, 255));
//移动人脸认证图片
ui ->headpicLb->move(rect.x, rect.y);
if(flag > 2)
{
//把Mat数据转化为QbyteArray, 编码成JPG格式
std::vector<uchar> buf;
cv::imencode(".jpg", SrcImage, buf); // 存到buf中
//将vector<uchar> 类型强制转化为数组
QByteArray byte((const char*)buf.data(), buf.size());
//准备发送
quint64 backsize = byte.size();
QByteArray sendData;
QDataStream stream(&sendData,QIODevice::WriteOnly);//把数据打包为数据流
stream.setVersion(QDataStream::Qt_5_14);
stream<<backsize<<byte;
//发送
msocket.write(sendData);
flag = -2;
}
flag++;
}
if(faceRects.size()==0)
{
// 把人脸认证框移动到中心位置
ui->headpicLb->move(110,60);
flag = 0;
}