如何使用从sqlite数据库中检索的blob图像

时间:2015-09-02 04:17:07

标签: c++ qt sqlite opencv blob

我希望有人可以帮我解决这个问题,因为我不熟悉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以进一步进行人脸识别? :(谢谢。

0 个答案:

没有答案