opencv copyTo中的分段错误

时间:2016-10-15 20:11:04

标签: c++ opencv

由于opencv内置填充函数不适用于任何多维矩阵,我必须自己编写:

<img src="http://i.imgur.com/ZKEqcWm.jpg" id = "rotating_image">

我假设输入矩阵有3个维度,填充仅在1和2维中完成。

当我用不同类型的矩阵调用此函数时,我得到分段错误(在调用copyTo的行),我无法弄清楚原因。 测试代码示例:

cv::Mat PadImage(const cv::Mat& input, int pad_h, int pad_w)
{
    int padded_size[3];
    padded_size[0] = input.size[0] + 2 * pad_h;
    padded_size[1] = input.size[1] + 2 * pad_w;
    padded_size[2] = input.size[2];

    cv::Range ranges[3];
    ranges[0] = cv::Range(pad_h, padded_size[0] - pad_h);
    ranges[1] = cv::Range(pad_w, padded_size[1] - pad_w);
    ranges[2] = cv::Range(0, input.size[2]);

    cv::Mat input_padded(3, padded_size, input.type(), 0);
    // segmentation fault here at this call !
    input.copyTo(input_padded(ranges));
    return input_padded;
}

1 个答案:

答案 0 :(得分:2)

你为cv::Mat触发了错误的构造函数,当你试图用0初始化矩阵时,总是记得有另一个带有原始指针的构造函数

Mat::Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0);

因此,如果你纠正以下两行,你应该能够得到你想要的东西

cv::Mat input_padded(3, padded_size, input.type(), cv::Scalar(0));
cv::Mat X(3, size, CV_8UC1, cv::Scalar(0));