2017-06-15 52 views
-1

以下代碼導致分段錯誤。分配像素值時出現分段錯誤

void sharpen(Mat& src, Mat& dst) 
{ 
    cout<<"\n\nFunction just called\n\n"; 
    for (int i = 1; i < src.rows; i++) 
    { 
     for (int j = 1; j < src.cols; j++) 
     { 
     dst.at<uchar>(j, i) = 2*src.at<uchar>(j, i); 
     } 
    } 

    imshow("src",src); 
    imshow("dst",dst); 
} 

這是什麼問題?

+3

請提供更多代碼,例如至少循環。聲明部分也是有用的。 –

+3

我的水晶球說錯了。你的調試器說什麼? –

+1

'dst'和'src'可能不是相同的大小。 – MrPromethee

回答

1

你換行和列,see here on SO解決它。使用dst.at<uchar>(i, j)=2*src.at<uchar>(i, j);,注意差異(i, j)

Mat類其(row, column)和在點類它是(columns, row)

此外,請檢查您的矩陣的尺寸,因爲您使用的尺寸爲src以便循環使用srcdst,因此尺寸應該相等。進一步在0開始你的索引變量,因爲在C/C++中你從0開始計數。

1

Dst和Source imgs必須具有相同的大小。 你可以做這樣的事情

Mat sharpen(Mat src) 

{ 

Mat dst = src.clone(); 
dst = 2*src; 

imshow("src",src); 
imshow("dst",dst); 

return dst; 


}