Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用从sqlite数据库检索的blob图像_C++_Qt_Sqlite_Opencv_Blob - Fatal编程技术网

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

C++ 如何使用从sqlite数据库检索的blob图像,c++,qt,sqlite,opencv,blob,C++,Qt,Sqlite,Opencv,Blob,我希望有人能帮助我解决这个问题,因为我是opencv和sqlite数据库的新手。关于如何使用sqlite数据库中的blob图像使用模板匹配识别人脸的代码,我遇到了问题。我已使用blob-from mat image成功地将图像存储到数据库中: QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "C://Users//yana//Desktop//Detected Faces//",tr("Image

我希望有人能帮助我解决这个问题,因为我是opencv和sqlite数据库的新手。关于如何使用sqlite数据库中的blob图像使用模板匹配识别人脸的代码,我遇到了问题。我已使用blob-from mat image成功地将图像存储到数据库中:

  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();
 }
    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());
问题就从这里开始。所以为了识别人脸,我使用了cv mat image-
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图像的代码:

  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();
 }
    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读取斑点图像并将其转换为mat以进一步进行人脸识别的问题吗(谢谢。

如果您不使用数据库,而是将文件保存/加载到磁盘上,您的人脸识别代码是否有效?qry.value(5)-5似乎不正确,因为您在select语句中只有一个字段。这几乎是的副本。希望答案就是您想要的。让我们知道。@MichaelVencent是的,Michael。我的人脸识别工作非常完美,只有在我选择模板图像并同时进行识别阶段的情况下。如果我关闭然后,程序重新启动,只需输入FaceID,它就不起作用了。从数据库检索blob数据并将其用作模板时仍有错误,我不知道如何解决。请帮助我:(@KubaOber谢谢你的帮助。我已经回答了重复的问题并试图更改代码。但仍然不起作用。:(我只是想问,如果我在firefox加载项上使用sqlite管理器,我还需要使用.dump吗?