2016-06-22 6 views
0

私はC++でsqliteを使っていますが、opencvで画像を読むときに、画像(Mat)をデータベースに取り込みたいのですが、これらの中でどのようにBLOBをテーブルに挿入するのか分かりません。
sqliteにBLOBを格納して取得するにはどうすればよいですか?C++を使用してsqliteからblobを格納および取得するにはどうすればよいですか?

これらは私のコードです:文字列が最初にゼロバイトでそれを切り捨てられますよう

void DataBase::Store_Images_to_DB(std::vector<cv::Mat> input_images , 
            std::vector <QString> image_names) 
{ 
    /* // this way is working, but i dont want to use this way. 

    QFile file("/home/hassan-setayesh/Pictures/123.png"); 
    if (!file.open(QIODevice::ReadOnly)) return -1; 
    QByteArray inByteArray = file.readAll(); 

    */ 



    // I want to store images to a blob from a Mat, 
    //this way is not working and store something wrong in QByteArray 

    cv::Mat image; 
    query = QSqlQuery(db); 
    if(!query.exec("CREATE TABLE IF NOT EXISTS imgTable " 
        "(filename TEXT, imagedata BLOB)")) 
     { 

     qDebug()<<"cant exec query for creating table"; 
     exit(-1); 
    } 
    for(int i = 0 ; i<input_images.size() ; i++) 
    { 
     image = input_images[i]; 
     QByteArray inByteArray((char *) image.data); 
     qDebug()<<"add "<<i<<"th to db"; 

     query.prepare("INSERT INTO imgTable (filename, imagedata) " 
         "VALUES ('"+image_names[i]+"', :imageData)"); 
     query.bindValue(":imageData", inByteArray); 
     if(!query.exec()) 
      qDebug() << "Error inserting image into table:\n" << query.lastError(); 
    } 




} 
+0

なぜこのメソッドにパラメータをコピーしますか?それは早すぎる悲観的なものです。 Store_Images_to_DB(const std :: vector &input_images、const std :: vector &image_names) 'の代わりにconst参照で渡す必要があります。 –

答えて

0
QByteArray inByteArray((char *) image.data); 

は、画像データを扱います。データの実際のサイズを使用してバイト配列を作成する必要があります。

QByteArray inByteArray((char *) image.data, image.step[0] * image.rows); 
+0

QByteArray inByteArray((char *)image.data、image.rows * image.rows);私はこの方法を使用しましたが、まだQByteArrayに問題があります –

+0

申し訳ありませんが、 'step'を入力してください。 –

+0

残念ながらまだ動作しません。私がQFileで使用するとき、QBytearrayは次のようなものです: "\ 211PNG \ r \ n \ 032 \ n \ 000 \ 000 \ 000 \ rIHDR \ 000 \ 000 \ 007 \ 200 \ 000 \ 000 \ 0048 \ 010 \ 002 \ 000 \ 000 \ 000g±V "QByteArrayは:" ______________________________________________________________ " –

関連する問題