2016-04-18 14 views
0

I opencvを使用してURLから画像をロードしようとしていて、Visual Studio 2010でカールしています。コードを実行中に、上記のエラーが発生しています。 は、ここに私のコードの助けをOpenCVエラー:cv :: imdecode_、ファイル.. .. .. .. opencv modules highgui src loadsave.cppのアサーションに失敗しました(buf.data && buf.isContinuous())

#include "curl/curl.h" // has to go before opencv headers 
 

 
#include <iostream> 
 
#include <vector> 
 
using namespace std; 
 

 
#include <opencv2/opencv.hpp> 
 
using namespace cv; 
 

 
//curl writefunction to be passed as a parameter 
 
// we can't ever expect to get the whole image in one piece, 
 
// every router/hub is entitled to fragment it into parts 
 
// (like 1-8k at a time), 
 
// so insert the part at the end of our stream. 
 
size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata) 
 
{ 
 
    vector<uchar> *stream = (vector<uchar>*)userdata; 
 
    size_t count = size * nmemb; 
 
    stream->insert(stream->end(), ptr, ptr + count); 
 
    return count; 
 
} 
 

 
//function to retrieve the image as cv::Mat data type 
 
cv::Mat curlImg(const char *img_url, int timeout=10) 
 
{ 
 
    vector<uchar> stream; 
 
    CURL *curl = curl_easy_init(); 
 
    curl_easy_setopt(curl, CURLOPT_URL, img_url); //the img url 
 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // pass the writefunction 
 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream); // pass the stream ptr to the writefunction 
 
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout); // timeout if curl_easy hangs, 
 
    CURLcode res = curl_easy_perform(curl); // start curl 
 
    curl_easy_cleanup(curl); // cleanup 
 
    return imdecode(stream, -1); // 'keep-as-is' 
 
} 
 

 
int main(void) 
 
{ 
 
    Mat image = curlImg("http://pimg.tradeindia.com/01063301/b/1/CRO-Oscilloscope.jpg"); 
 
// if (image.empty()) 
 
//  return -1; // load fail 
 

 
    namedWindow("Image output", CV_WINDOW_AUTOSIZE); 
 
    if (!image.empty()) 
 
\t \t imshow("Image output",image); // here's your car ;) 
 
    waitKey(0); // infinite 
 
}

おかげです。

答えて

0

このエラーは、opencv imdecode()に渡されるストリームのサイズに関連しています。ストリームのサイズを確認して、正しいかどうか(ゼロ以外の値またはnullでないかどうかを確認してください)。

関連する問題