我想將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