OpenCv c ++ Создать C обертку для базовой функции печати мат?

0

Я могу создать и распечатать такую матрицу:

  Mat M(2,2, CV_8UC3, Scalar(0,0,255));
 cout << "M = " << endl << " " << M << endl << endl;

Моя оболочка C для функций C++ такова:

Mat* cv_printmat(Mat* mat) {

   return  cout << "Matrix = " << endl << " " << *mat << endl << endl;
    }

Не уверен, куда идти отсюда... Мне нужно объявить "Mat * mat", как... непрозрачный указатель для моей цели... но получить эту ошибку

       In file included from /usr/include/c++/4.8/ios:44:0,
             from /usr/include/c++/4.8/istream:38,
             from /usr/include/c++/4.8/sstream:38,
             from /usr/include/c++/4.8/complex:45,
             from /usr/local/include/opencv2/core/cvstd.inl.hpp:48,
             from /usr/local/include/opencv2/core.hpp:1256,
             from /usr/local/include/opencv2/opencv.hpp:46,
             from opencv_generated.hpp:1,
             from cl-opencv-glue.cpp:1:
/usr/include/c++/4.8/bits/basic_ios.h:115:7: note: 
candidate is: std::basic_ios<_CharT, _Traits>::operator 
void*() const [with _CharT = char; _Traits = std::
char_traits<char>] <near match>
   operator void*() const
   ^
/usr/include/c++/4.8/bits/basic_ios.h:115:7: note:   
no known conversion for implicit ‘this parameter from ‘void* to ‘cv::Mat*

компиляция с помощью этого:

 g++ -Wall -shared -fPIC -o libcl-opencv-glue.so cl-opencv-glue.cpp

любая помощь очень ценится =).

Изменить... новая ошибка

 opencv-glue.cpp :150:58 error:invalid user-defined conversion from                 
‘std::basic_ostream<char>::__ostream_type {aka std
::basic_ostream<char>} to ‘cv::Mat* [-fpermissive]
     return cout << "M = " << endl << " " << *mat << endl << endl;
                                                          ^
      In file included from /usr/include/c++/4.8/ios:44:0,
                 from /usr/include/c++/4.8/istream:38,
                 from /usr/include/c++/4.8/sstream:38,
                 from /usr/include/c++/4.8/complex:45,
                 from /usr/local/include/opencv2/core/cvstd.inl.hpp:48,
                 from /usr/local/include/opencv2/core.hpp:1256,
                 from /usr/local/include/opencv2/opencv.hpp:46,
                 from opencv_generated.hpp:1,
                 from opencv-glue.cpp:1:
/usr/include/c++/4.8/bits/basic_ios.h:115:7: note: candidate is: 
std::basic_ios<_CharT, _Traits>::operator void*() const [with _
CharT = char; _Traits = std::char_traits<char>] <near match>
       operator void*() const
       ^
/usr/include/c++/4.8/bits/basic_ios.h:115:7: note:   
no known conversion for implicit ‘this parameter from 
‘void* to ‘cv::Mat*
  • 1
    Просто замечание: это не оболочка C, если вы используете Mat.
Теги:
opencv

1 ответ

2

Тип возвращаемых данных - cv :: Mat *, тогда как тип возвращаемых данных для std :: cout равен void *. Не знаете, какова ваша цель, но это должно компилироваться, если вы просто пытаетесь распечатать.

void cv_printmat(Mat* mat) {
  cout << "Matrix = " << endl << " " << *mat << endl << endl;
}

int main(int argc, char* argv[]){
   cv::Mat M(2,2, CV_8UC3, cv::Scalar(0,0,255));
   cv_printmat(&M);
}
  • 0
    Спасибо за ваш ответ .... но все равно получаю ошибку при возврате как недействительной ... любой совет по этой ошибке случайно
  • 0
    Я обновил свой код, он компилируется и работает нормально для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню