【问题标题】:Segfault when using open cv Mat::at使用 open cv Mat::at 时的段错误
【发布时间】:2016-02-18 17:34:03
【问题描述】:

我正在尝试用一些值填写一个 opencv 矩阵,但我不断收到段错误。代码如下:

Mat mask_gx(in_window_size, in_window_size, image.type());
  for(int i = 0; i <= in_window_size; i++)
  {
    for(int j = 0; j <= in_window_size; j++)
    {
      double gx = (-i/in_sigma) * pow(M_E, ((pow(i, 2)* pow(j, 2))/pow(in_sigma, 2))/(-2));
      mask_gx.at<double>(j, i) = gx;
    }
  }

问题出在最后一行。我已经测试过了:

mask_gx.at<int>(j, i) = 1;

我仍然得到段错误。

有人知道这段代码有什么问题吗?

【问题讨论】:

    标签: opencv


    【解决方案1】:

    如果in_window_size 是每个维度中值的数量,那么我相信在for-loop 比较中它应该是&lt; 而不是&lt;=

    【讨论】:

    • 谢谢,我已经更正了,但这并不能解决问题。有趣的是,最后一行在循环之外工作得很好。
    • 会不会是image.type() 没有正确对应于允许您设置double 值的类型(如mask_gx.at&lt;double&gt;)?也许它对应的类型小于double
    • 这个问题越来越有趣了。 in_window_size 的值为 11。当我尝试将固定值放入循环时,它可以完美地工作到 7。但是 7 之后的所有内容都会导致段错误。同样,以下代码在循环外也能正常工作:mask_gx.at&lt;double&gt;(11, 11) = 1.0;
    • 我真的感觉到它与您用于创建 Mat 的类型有关(可能是错误的,我以前从未使用过这个库)。您确定image.type() 代表&lt;double&gt;,因为您正在尝试访问它?有关 Mat 构造函数的 type 参数的文档,请参阅以下链接:opencv.willowgarage.com/documentation/cpp/…
    • 非常感谢维克多。这样就解决了问题:` Mat mask_gx(in_window_size, in_window_size, DataType::type);`
    猜你喜欢
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2019-05-04
    • 2020-01-07
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多