简体   繁体   中英

OpenCV Error: Assertion failed (buf.data && buf.isContinuous()) in cv::imdecode_, file ..\..\..\..\opencv\modules\highgui\src\loadsave.cpp

I am trying to load an image from an url using opencv and curl in visual studio 2010.While running the code I am getting the above mentioned error.What does that error mean?How can I correct my code. Here is my code

 #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()) imshow("Image output",image); // here's your car ;) waitKey(0); // infinite } 

Thanks for the help.

This error relates to the size of stream passed to opencv imdecode(). Try to check the size of stream and see if its correct ie non-zero or non-null.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM