更新をサポートしていない FisherFaces 認識エンジンを使用して、Qt と openCV で顔認識に取り組んでいるため、顔データベースを保存して、変更後に認識エンジンを再トレーニングする必要があります。
保存するための私のコードは次のとおりです。
save(const std::vector* MatVect){
QFile file("students_dataset.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
QVector qimgvect;
for (size_t i = 0; i < MatVect->size(); ++i)
{
cv::Mat matt = MatVect->at(i);
QImage img((uchar*)matt.data, matt.cols, matt.rows, matt.step, QImage::Format_Indexed8);
qimgvect.push_back(img);
}
out << qimgvect ;
file.flush();
file.close();
}
これはロード用です:
load(std::vector* MatVect)
{
QFile file("students_dataset.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
QVector qimgvect;
in >> qimgvect;
for (size_t i = 0; i < qimgvect.size(); ++i)
{
QImage img = qimgvect.at(i);
cv::Mat matt = cv::Mat(70, 70, CV_8U, img.bits(), img.bytesPerLine());
MatVect->push_back(matt);
}
file.close();
return;
}
問題は、ファイルから読み返したものが保存したものではないことです

では、このコードの何が間違っているのでしょうか (すべてではないことを願っています)。
ベクトルを保存するより良い/簡単な方法はありますか?
編集: Marek_R
の
おかげで、変換部分は修正されましたが、QDataStream を使用した保存と読み込みが問題になりまし
た。これらの行の原因は何ですか? 編集:
私はこれを試しました: QDataStream部分を公開し、要素
化しました: QimgVect->MatVectよりもMatVect->QimgVectを作成し、正常に動作しましたが、QDataStreamを追加した後: MatVect->QimgVect->QDataStreamおよびQDataStream->QimgVect->MatVect i上記の結果を取得します (縦の白い線)。
から画像を変換する編集
QimgVect
qdatastream から読み取った後にRGB32からIndexed8にすると、次の結果が得られます。