Frage

I'm playing with this C wrapper for the OpenCV function imread.

 Mat* cv_imread(String* filename, int flags) {
     return new Mat(cv::imread(*filename, flags));
 }

It's failing somewhere I think so I'm trying to test to make sure it's written right. I just need to know how to create a String* to fill its first argument.. I've tried creating a string with

 char* filename = "~/home/test.jpg"

then casting to String* i/e

 (String*)filename

but that's not working..I've tried many other variations to cast to pointer found online but found nothing cv_imread would accept. In my code it's necessary to have the filename parameter be a String* and not another type. But I could use help creating a String* to give to cv_imread.

Edit: per your edit I tried

 const char* filename = "/home/w/d1";


 cv_imread(new string (filename), 1);

but got error:

cannot convert ‘std::string* {aka std::basic_string}’ to ‘cv::String’ for argument ‘1’ to ‘cv::Mat* cv_imread(cv::String*, int)’ cv_imread(new string (filename), 1);

If you can help me with it I'd appreciate it

War es hilfreich?

Lösung

Use string::c_str() to get the underlying pointer of a string:

Mat* cv_imread(String* filename, int flags) {
     return new Mat(cv::imread(filename->c_str(), flags));
}

Or you can use string::data() too. They have the same functionality after C++11.


Edit: OP seems to want to pass a char* to cv_read. Then should do this:

cv_read(new String(filename), 1);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top