以下代码会导致分段错误。
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);
}
这有什么问题?
答案 0 :(得分:1)
Dst和Source imgs必须具有相同的大小。 你可以通过做这样的事情来解决它
Mat sharpen(Mat src)
{
Mat dst = src.clone();
dst = 2*src;
imshow("src",src);
imshow("dst",dst);
return dst;
}
答案 1 :(得分:1)
您交换行和列see here on SO。使用dst.at<uchar>(i, j)=2*src.at<uchar>(i, j);
,注意差异(i, j)
。
在Mat
班级(row, column)
和点班级(columns, row)
。
同时检查矩阵的维度,因为您使用src
的大小来循环src
和dst
,因此维度应该相等。进一步在0
处启动索引变量,因为在C / C ++中,您从0
计算。