【问题标题】:Print the contents of String* from OpenCV从 OpenCV 打印 String* 的内容
【发布时间】:2014-03-19 13:35:06
【问题描述】:

我有一个需要调试的 opencv c++ imread 的 C 包装器(如下)。原因是当我用另一种语言包装 C 包装器时它不起作用,文件名参数没有被正确接收

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

所以我需要通过执行类似于以下函数的操作来调试它:

 using namespace std;

 Mat* cv_imread(String* filename, int flags) 
 {
    cout << filename; // but I'd need to find out how to print contents of filename other
                      //than just the pointer
    return new Mat(cv::imread(*filename, flags));
 }

让我们说String* filename = "home/user/test.jpeg"

这就是我需要打印的不是内存中 8 或 9 个字符的指针位置。

所以如果有人能告诉我如何取消引用String* filename,我就可以cout &lt;&lt; filename-&gt;&lt;add text here&gt;;

【问题讨论】:

  • String 到底是什么?
  • @crashmstr:它是 OpenCV 库的 C 包装器。这就是为什么它被标记为 opencv。
  • @crashmstr,opencv 最近自带了自己的 cv::String 类..
  • 一致使用cv:: 前缀会很好......现在听起来像是一个简单的文档搜索。
  • @adripanico 感谢您的评论...您实际上回答了我的?最好的......你应该发布作为答案,所以我可以投票给你:)

标签: c++ opencv wrapper


【解决方案1】:

使用c_str获取字符串的底层指针:

cout &lt;&lt; filename-&gt;c_str() &lt;&lt; endl;

因此,这也是调用cv_imread 的正确方法:

return new Mat(cv::imread(filename-&gt;c_str(), flags));

【讨论】:

    【解决方案2】:

    由于filename 是指向内存位置(字符串的第一个字符)的指针,因此如果您以这种方式打印出来:

    cout << filename;
    

    你会得到内存地址。

    如果要获取指针指向的数据,只需使用:

    cout << *filename;
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2013-05-13
      • 1970-01-01
      • 2018-06-05
      • 2011-04-06
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多