【问题标题】:Getting error - class cv::Mat’ has no member named ‘get’ when using Mat.get....is it deprecated?出现错误 - 使用 Mat.get 时,类 cv::Mat' 没有名为“get”的成员 ....是否已弃用?
【发布时间】:2014-03-09 15:48:30
【问题描述】:

我想要一个快速简单的函数,我可以为垫子对象提供行号和列号,并让它输出该位置元素的值...我搜索了一下,发现一些网站推荐“垫子”。 get(int row, int col)' 但是当我尝试使用它时出现错误

这是我的代码,错误在帖子标题中

Mat M(2,2, CV_8UC3, Scalar(0,0,255));


cout << "b = " << endl << " " << M.get(0, 0) << endl << endl;

我不想写一个很长的 for 循环来检索像素...有人可以帮我弄清楚为什么会出现这个错误,或者推荐一个快速的 1 班轮来获得 a 的值垫子对象中的单个元素...但是一个衬垫需要能够在不知道类型的情况下运行,因此 Mat.at 将无法工作....谷歌搜索很多带来不容易的 1 衬垫....任何帮助表示赞赏

编辑:

按照您的建议使用 M.at

cout << "M.at = " << endl << " " <<a.at<uchar>(0, 0) << endl << endl;

输出是这样的

M.at = 
^@

当你做得不对时你会得到那种奇怪的符号......我试图避免 M.at 因为我认为它需要一个我不想输入的类型......任何帮助表示赞赏

编辑 2:感谢您这么快回复我...我发现一个错误我的垫子是 CV_64F 我出于另一个原因将其更改...我将其更改回 CV_8UC3 并尝试了 CV_8UC1 并得到以下输出对于两者

M =
d(yes letter d)   

感谢您的任何建议......

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    cv::Mat 没有get() 方法,您应该改用Mat::at()

    M.at<uchar>(0, 0)
    

    编辑:如果你的垫子是'CV_64F'类型,你应该使用

    M.at<double>(0, 0)
    

    【讨论】:

    • 感谢您的快速回复...您介意查看最新的编辑吗
    • @EdwardMonney 如果你的垫子是用类型CV_8U定义的,它应该适用于at&lt;uchar&gt;
    • @ herohuyongtao 好的,我开始工作了...这是标量... Mat::at 没有返回所有标量​​元素...只是第一个...谢谢您的帮助关于这个=)
    • 我什至无法在 openCv 的 java 实现中找到方法,请您看一下我的问题:stackoverflow.com/questions/62443053/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多