2016-04-18 5 views
0

I я пытаюсь загрузить изображение с URL-адреса, используя opencv и curl в visual studio 2010. При запуске кода я получаю вышеупомянутую ошибку. Что означает эта ошибка? Как я могу исправить свой код. Вот мой кодОшибка OpenCV: утверждение не выполнено (buf.data && buf.isContinuous()) в cv :: imdecode_, файл .. .. .. .. opencv modules highgui src loadedave.cpp

#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(). Попытайтесь проверить размер потока и посмотреть, правильно ли вы это сделаете ненулевое или ненулевое.

Смежные вопросы