我想将cv :: Mat数据保存到一个线性数组中,但我不知道为什么会有错误。图像颜色是灰度(CV_8UC1
)。下面是代码:我无法将cv :: Mat保存到一维数组中
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);
我很困惑这个问题。感谢任何提前给出建议的人!
'n'和'm'在这里与'img'的实际大小有什么关系?是否允许提取锚定在左上角的较小投资回报率? (尽管为什么你不会仅仅通过适当的投资回报率,利用现有的OpenCV功能)。然而,如果你想保留它们,增加一些验证可能是一个好主意。 –
你打算如何处理原始数组?你是否需要将其所有权转让给另一段无法修改的代码? |我看到的进一步问题是假设输入Mat是'CV_8UC1',但从未实际验证它。 –
我想分配一个大小为n * m的数组,并将cv :: Mat图像保存到数组中。我应该写成'uchar * res = new uchar [m * n];',那个错误简单而愚蠢。万分感谢! – sunjy