繁体   English   中英

opencv copyTo中的分段错误

[英]Segmentation fault in opencv copyTo

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

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;
}

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

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

int size[3] = {61, 29, 32};
cv::Mat X(3, size, CV_8UC1, 0);
cv::Mat X_ = PadImage(X, 1, 1);

您为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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM