c++ - 我无法将 cv::Mat 保存到一维数组中

标签 c++ opencv segmentation-fault

我想将cv::Mat数据保存到线性数组中,但不知道为什么会有bug。图像颜色为灰度(CV_8UC1)。这是代码:

uchar* imgToArray(cv::Mat& img)
{
    int n = img.rows;
    int m = img.cols;
    uchar* res = new uchar(m * n);
    for(int row = 0; row < m; row++)
    {
        for(int col = 0; col < n; col++)
        {
            res[row * n + col] = img.at<uchar>(row, col);
        }
    }
    return res;
}

提到的调试信息,

Program received signal SIGSEGV, Segmentation fault.
0x000055555555c0e9 in imgToArray (img=..., n=512, m=512) at ../conversion.cpp:10
10              res[row * n + col] = img.at<uchar>(row, col);

我对此很困惑。感谢任何提前提供建议的人!

最佳答案

您已创建一个值为 m * n 的 int 对象

uchar* res = new uchar(m * n);

不是数组,应该是

uchar* res = new uchar[m * n];

关于c++ - 我无法将 cv::Mat 保存到一维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870057/

相关文章:

c - 这个 strcmp() 有什么问题吗?

c++ - 霍夫曼编码其中一个函数内部的逻辑错误

c++ - 二进制搜索陷入无限循环?

c++ - 写入 InputOutputArray 抛出异常

python - 如何为实时系统制作opencv?

c - 嵌套结构和 Typedef

c++ - 构造函数中不清楚的段错误

c++ - 为什么不能推导出这个metametafunction的模板参数呢?

c++ - 我在 Mingw 中为 fcntl.h 和 unistd.h 链接了哪些库

c++ - 如何使用 Opencv 在任何计算机上显示图像