【问题标题】:Opencv row assignmement different valuesOpencv行分配不同的值
【发布时间】:2016-12-20 21:36:56
【问题描述】:

我在 OpenCV 中有这段代码:

cv::Mat1f codes(x,y);
...
for(int i=0; i<codes.rows ; i++){ //you don't care about n
  cv::Mat code(1,codes.cols, codes.type());
  encode_(..., code); //fill code with values
  codes.row(i) = code;
  std::cout<<"code= "<<code<<std::endl;
  std::cout<<"codes.row= "<<codes.row<<std::endl;
}

但是打印出来的值不同:

code= [-0.0018070865, -0.0088188984, -0.001866244, 0.0071420735, -0.00046708167, -0.0011722896, ...
codes.row= [0.091074832, 0.10463701, 0.060412209, 0.075102232, 0.036429934, 0.018214967, ...

为什么会这样?

【问题讨论】:

  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 很抱歉,但在假设我不知道如何使用您的调试器之前,您应该先询问一下,我知道如何使用。我这里有 很多 评分很高的问题。我的代码是最少的(没有包含额外的代码,只是你需要理解问题的那个)完整的(没有遗漏任何信息来理解问题)和可验证的(代码在合适的程序中工作)。使用传统调试器调试 OpenCV 并没有帮助,因为它是一个大型框架,您不能在库中挖掘太多。
  • 在使用之前了解你的框架!
  • 对不起,你是说你现在每一个方法都是你的框架?嗯,对你有好处。在我看来,一个问题有多简单并不重要,重要的是问题有多清晰。这个问题是 100% 清楚的,并且满足 stackoverflow 的要求。如果您不了解 OpenCV,请不要回答问题(或投赞成票/反对票)。我很惊讶这些基本概念是由我提供给像你这样有经验的用户的。干杯。
  • 好的,我想我设法实现了原始评论者所追求的目标。祝你的问题好运。

标签: c++ opencv matrix


【解决方案1】:

按照Mat::row 的文档,我自己发现替换:

  codes.row(i) = code;

与:

  code.row(0).copyTo(codes.row(i));

解决了问题...但是为什么呢? :D 我猜这与引用标头有关,但我无法详细了解机制。

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多