cURLを使用してAmazonS3からデータにアクセスするための複数のC++ライブラリがあることを認識しています。それらを使用して、ローカルマシンにイメージをダウンロードし、OpenCVに読み込んで、元のファイルを削除できます。
しかし、Matオブジェクトのように、S3からOpenCVに直接画像を読み取ることができるかどうか疑問に思いました。
誰かが私がこれを達成するのを手伝ってくれるでしょうか?
cURLを使用してAmazonS3からデータにアクセスするための複数のC++ライブラリがあることを認識しています。それらを使用して、ローカルマシンにイメージをダウンロードし、OpenCVに読み込んで、元のファイルを削除できます。
しかし、Matオブジェクトのように、S3からOpenCVに直接画像を読み取ることができるかどうか疑問に思いました。
誰かが私がこれを達成するのを手伝ってくれるでしょうか?
cv :: imdecodeを使用します。これにより、画像データ(png、jpegなど)を含むバッファーがメモリからマトリックスにロードされます。
// Suppose that a std::vector<char> contains the data loaded by Curl.
std::vector<char> data;
// The template<typename T> explicit cv::Mat::Mat(const std::vector<T>& vec)
// constructor gives this vector a cv::Mat header.
cv::Mat data_mat(data);
// Now use cv::imdecode to decode the image to a BGR matrix.
cv::Mat image(cv::imdecode(data_mat));
だから、それのポコ側が行く限り、これは私がしなければならなかったことです。
std::auto_ptr<std::istream> pStr(URIStreamOpener::defaultOpener().open(uri));
StreamCopier::copyToString(*pStr.get(), str);
str
これにより、中間ストレージなしで、提供されたURIから文字列に画像が取得されます。残りはクリストフが説明した通りです。