我希望有人可以帮我解决这个问题,因为我不熟悉opencv以及sqlite数据库。关于如何使用sqlite数据库中的blob图像来识别使用模板匹配的面部,我的代码存在问题。我已经使用blob-从mat图像成功将图像存储到dbase中:
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "C://Users//yana//Desktop//Detected Faces//",tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));
tpl = cv::imread(fileName.toLatin1().data());
QImage TImg(fileName);
// load image to bytearray
QFile f(fileName);
if(f.open(QIODevice::ReadOnly))
{
ba = f.readAll();
f.close();
}
所以这就是问题的起点。所以为了识别脸部,我使用了cv mat图像 - cv:: Mat tpl
。我从数据库中检索图像并将其转换为mat图像,但它不起作用。当我进行人脸识别时,程序突然崩溃并出现错误
OpenCV Error: Assertion failed ((img.depth() == CV_8U || img.depth() == CV_32F) && img.type() == templ.type()) in cv::matchTemplate
这是我从数据库中检索blob图像并将其转换为mat图像的代码:
QSqlQuery qry;
qry.prepare("SELECT TImg FROM TemplateInfo WHERE FaceID='"+Faceid+"'");
qry.exec();
qry.next();
QByteArray ba1 = qry.value(5).toByteArray();
QImage img = QImage();
img.loadFromData(ba1);
tpl= cv::Mat(img.height(), img.width(), CV_LOAD_IMAGE_GRAYSCALE, (uchar*)img.bits(), img.bytesPerLine());
任何人都可以帮我解决如何从sqlite读取blob图像并将其转换为mat以进一步进行人脸识别? :(谢谢。