gpt4 book ai didi

c++ - opencv copyTo中的段错误

转载 作者:行者123 更新时间:2023-11-28 01:59:30 25 4
gpt4 key购买 nike

由于 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 和维度上完成。

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

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

最佳答案

当您尝试用 0 初始化矩阵时,您为 cv::Mat 触发了错误的构造函数,请始终记住还有另一个采用原始指针的构造函数

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

关于c++ - opencv copyTo中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com