Je suis impatient de lire l'image à partir de la base de données MS-SQL en utilisant ADO (C++). Les images sont stockées en tant que varBinary (max) dans la base de données. J'ai essayé d'obtenir et de convertir des images au format cv::Mat
.Obtenir des données d'image à partir de la base de données en format cv :: Mat en utilisant C++ et Ado
Voici le code que j'ai,
HRESULT hr = ::CoInitialize(NULL);
ADODB::_ConnectionPtr pConnection;
hr = pConnection.CreateInstance(__uuidof(ADODB::Connection));
pConnection->CursorLocation = ADODB::adUseClient;
hr=pConnection->Open(L"Provider=sqloledb;Data Source=SAMPLE-DB;"
L"Initial Catalog=IMAGE;User Id=sr;Password=****;", L"",
L"", ADODB::adConnectUnspecified);
if (FAILED(hr))
{
//error handling...
}
ADODB::_RecordsetPtr recordset;
hr = recordset.CreateInstance(__uuidof(ADODB::Recordset));
std::string cmd = "SQL COMMAND THAT PROVIDE IMAGE BINARY";
recordset->Open(cmd.c_str(), pConnection.GetInterfacePtr(),
ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText);
std::vector<uchar> buffer;
buffer = recordset->Fields->GetItem(L"ImgBinary")->GetValue(); //problem!!
cv::Mat testImage = cv::imdecode(buffer,cv::IMREAD_COLOR); //problem!!
cv::namedWindow("MyWindow");
cv::imshow("MyWindow",testImage);
erreurs que j'ai,
1) 'cv :: imdecode': aucun des 2 pourrait convertir tous surcharges l'argument types
2-) IntelliSense: pas de conversion définie par l'utilisateur approprié de "_variant_t" à "std :: vector>" existe
Pourriez-vous aider s'il vous plaît? Comment puis-je obtenir l'image en format cv::Mat
?
Merci à l'avance