#include "IrisCameraCapEventHandler.h" IrisCameraCapEventHandler::IrisCameraCapEventHandler(QObject *parent) : QObject(parent) { } void IrisCameraCapEventHandler::DoOnImageCaptured(CImageDataPointer &objImageDataPointer, void *pUserParam) { if (objImageDataPointer.IsNull() == false) { CGXDevicePointer* cam = (CGXDevicePointer *) pUserParam; auto camName = cam->getPtr()->GetDeviceInfo().GetUserID(); int width = objImageDataPointer->GetWidth(); int height = objImageDataPointer->GetHeight(); size_t leftKeyIndex = camName.find("left"); size_t rightKeyIndex = camName.find("right"); uchar * pBuffer = (BYTE*)objImageDataPointer->GetBuffer(); if (pBuffer != NULL) { // 创建虹膜信息对象 CasicIrisInfo irisInfo; irisInfo.hasEye = false; if (leftKeyIndex >= 0 && leftKeyIndex < 32) { // 左眼相机拍摄的图像 irisInfo.leftOrRight = "left"; } else if (rightKeyIndex >= 0 && rightKeyIndex < 32) { // 右眼相机 irisInfo.leftOrRight = "right"; } if (ProMemory::getInstance().widgeFrame == CasicBioRecConst::RECOGNIZE_RESULT_FORM) { // 相机拍摄下的图像1280*960, 直接用于算法判断 QImage imgDisp = QImage(pBuffer, width, height, QImage::Format_Grayscale8); cv::Mat irisMat = ImageUtil::QImageToMat(imgDisp); irisInfo.data = imgDisp; irisInfo.matData = irisMat; ProMemory::getInstance().pushCasicIris(irisInfo); } else if (ProMemory::getInstance().widgeFrame == CasicBioRecConst::ADD_PERSON_CAPTURE_IRIS) { // 相机拍摄下的图像1280*960, 直接用于算法判断 QImage img = QImage(pBuffer, width, height, QImage::Format_Grayscale8); QImage imgAlgo = img.copy(0, 0, width, height); // 用于显示的图像需要缩小到1/4的尺寸 img = img.scaled(640, 480); cv::Mat irisMat = ImageUtil::QImageToMat(imgAlgo); irisInfo.data = imgAlgo; irisInfo.matData = irisMat; // 将图像显示在注册页面的label上 // 并将虹膜信息对象存入队列中 ProMemory::getInstance().pushCasicIris(irisInfo); if (leftKeyIndex >= 0 && leftKeyIndex < 32) { emit sendIrisFrameToDraw(img, 0); // 左眼画面 } else if (rightKeyIndex >= 0 && rightKeyIndex < 32) { emit sendIrisFrameToDraw(img, 1); // 右眼画面 } } } } }