bool loadImage(string inputName, Mat &image)
{
bool from_net = true;
if (inputName.find("http") != string::npos)
{
string URL = inputName;
if (inputName.find("\"") == 0)
{
URL = inputName.substr(1,inputName.length()-2);
}
ofstream myfile;
myfile.open ("test.jpg");
// Create a writer to handle the stream
curl_writer writer(myfile);
// Pass it to the easy constructor and watch the content returned in that file!
curl_easy easy(writer);
// Add some option to the easy handle
easy.add(curl_pair<CURLoption,string>(CURLOPT_URL,URL));
easy.add(curl_pair<CURLoption,long>(CURLOPT_FOLLOWLOCATION,1L));
try {
easy.perform();
} catch (curl_easy_exception error) {
// If you want to get the entire error stack we can do:
vector<pair<string,string>> errors = error.what();
// Otherwise we could print the stack like this:
//error.print_traceback();
}
myfile.close();
string inputname = "test.jpg";
image = imread(inputname,1);
if(image.rows == 0 || image.cols == 0)
from_net = false;
}
else
{
image = imread( inputName, 1 );
if (image.total() < 1)
from_net = false;
}
return from_net;
}
test.txt
に変更すると、これは私のアプリケーションでは問題なく機能しtest.jpg
ます。ただし、私のアプリケーションでは、ファイルの作成、読み取り、書き込み、および閉じるというオーバーヘッドを回避する必要があります。URL から画像データを取得して openCV Mat に書き込む簡単で直接的な方法はありますか?
上記のリンクの3番目の例も試しました。しかし、何らかの理由で を実行するreceiver.get_buffer()
と、画像が空のままになります。画像の寸法を として取得し0X0
ます。
これに関連するヘルプは本当に感謝しています。これまでcurlcppを使用したことがないので、同じことについての詳細な説明をいただければ幸いです。
ありがとう。